无法将数组更改为正确的大小

问题描述 投票:1回答:3

所以我试图通过从main方法传入一个数组,在一个单独的方法中创建一个不同长度的新数组,但我遇到了麻烦。基本上我正在尝试做的是使它成为我的起始数组值

 int [] myInches = {89,12,33,7,72,42,76,49,69,85,61,23};

转移到我的createLowerArray方法,并通过将其与用户输入maxParam进行比较,创建一个新数组并返回它。

   public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
    int [] betterInches = {0,0,0,0,0,0,0,0,0,0};
    for (int i = 0; i < myInchesParam.length; i++) {
        if (myInchesParam[i] < maxParam) 
            betterInches[i] = myInchesParam[i];
    } 
    return betterInches;
}

因此,假设用户输入“40”,它会看到myInches / myInchesParam中的相应元素是否更小,如果是,则将替换我在该方法中创建的数组及其相应的值。因此,由于12,33,7和23是唯一小于40的元素,它应该形成长度为3的数组,其中位置0为12,[1] = 12,[2] = 7,并且[3] = 23我知道由于内存问题,你不能制作一个比它已经更大的阵列,但是有可能从它已经是正确的一个变小吗?如果这不可能,我想知道如何得到这个结果,因为它返回的数组与原始元素位置不正确的长度相同,这不是我想做的。预先感谢您的任何帮助。

java arrays loops output variable-length-array
3个回答
2
投票

您无法更改已创建的数组的长度。这意味着您无法增加或减少尺寸。你有几个选择。首先,你可以使用ArrayList。使用列表的好处是它们具有内置函数,可以增加和减少数据的长度。

另一个选项(不需要ArrayLists)是在你知道它需要多长时间(或多短)之前不创建数组。为此,您可以编写一个for循环,用于计算要添加到新阵列的项目数。然后,在该循环之后,您将创建该长度的数组。最后,编写第二个for循环,将元素添加到新创建的数组中。


1
投票

为此,您可以使用List。

试试这个:

public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
    List<Integer> betterInches= new ArrayList<Integer>();
    for (int i = 0; i < myInchesParam.length; i++) {
        if (myInchesParam[i] < maxParam) 
            betterInches.add(myInchesParam[i]);
    } 
    Integer[] returnedInches= betterInches.toArray();
    return returnedInches;
}

0
投票

数组具有每个定义在初始化时为其提供的大小。很遗憾,您将无法动态更改阵列的大小。你可以做的是创建一个具有相应大小的新数组或尝试使用ArrayLists(或同样的任何List)。根据数组大小的计算方式,您甚至可以在创建之前计算大小,然后在初始化时设置正确的数组大小。

可以在here找到创建ArrayList的示例。

或者@preciousbetine如何建议你可以将你的方法重写为类似的东西(它都是在没有任何额外库的情况下编写的)

public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
        List<Integer> betterInches= new ArrayList<>();
        Arrays.stream(myInches)
            .forEach(inches -> {
                if (inches < maxParams) {
                    betterInches.add(inches);
                }
            });
        return betterInches.toArray();
    }
© www.soinside.com 2019 - 2024. All rights reserved.