所以我试图通过从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我知道由于内存问题,你不能制作一个比它已经更大的阵列,但是有可能从它已经是正确的一个变小吗?如果这不可能,我想知道如何得到这个结果,因为它返回的数组与原始元素位置不正确的长度相同,这不是我想做的。预先感谢您的任何帮助。
您无法更改已创建的数组的长度。这意味着您无法增加或减少尺寸。你有几个选择。首先,你可以使用ArrayList。使用列表的好处是它们具有内置函数,可以增加和减少数据的长度。
另一个选项(不需要ArrayLists
)是在你知道它需要多长时间(或多短)之前不创建数组。为此,您可以编写一个for循环,用于计算要添加到新阵列的项目数。然后,在该循环之后,您将创建该长度的数组。最后,编写第二个for循环,将元素添加到新创建的数组中。
为此,您可以使用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;
}
数组具有每个定义在初始化时为其提供的大小。很遗憾,您将无法动态更改阵列的大小。你可以做的是创建一个具有相应大小的新数组或尝试使用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();
}