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

时间:2019-04-12 05:17:51

标签: java arrays loops output variable-length-array

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

的起始数组值
 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,位置0为12,[1] = 12,[2] = 7,[3] = 23 。我知道由于内存问题,您不能使数组变得比原来大,但有可能使数组变小而已吗?如果这不可能,或者我想知道如何获得此结果,因为它返回的数组的长度与具有不正确元素位置的原始数组的长度相同 这不是我想做的。预先感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您不能更改已经创建的数组的长度。这意味着您不能增加减小大小。您在这里有一些选择。首先,您可以使用ArrayList。使用列表的好处是它们具有内置功能,可让您增加和减少数据长度。

另一种选择(不需要ArrayLists将不创建该数组,直到您知道需要多长时间(或多短)。为此,您可以编写一个for循环,该循环对要添加到新数组中的项目数进行计数。然后,在该循环之后,您将创建一个具有该长度的数组。 最后,编写第二个for循环,将元素添加到新创建的数组中。

答案 1 :(得分:1)

为此,您可以使用列表。

尝试一下:

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;
}

答案 2 :(得分:0)

根据定义,数组具有初始化时指定的大小。因此,遗憾的是您将无法动态更改数组的大小。 您可以做的是根据大小创建一个新数组,或者尝试使用ArrayLists(或类似的任何List)。 根据数组大小的计算方式,您甚至可以在创建数组之前计算大小,然后在初始化时设置正确的数组大小。

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

或@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();
    }