我试图更多地理解阵列。我想创建一个循环来填充一个数组,其中包含两个数字之间的所有值。但是,似乎我只能让它“重置”数组的单个位置的值。其他所有东西都归零。以下是我的代码:
public class ArrayTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int indexLow = 3;
int length = 10;
for(int i=indexLow; i<indexLow+length; i++){
int[] MyArray = new int[length+indexLow];
MyArray[i] = i;
System.out.println(MyArray[i]);
System.out.println(Arrays.toString(MyArray));
}
} }
输出并不是我所期待的。我做错了什么?
答案 0 :(得分:1)
我想你可能想把int [] MyArray = new int [length + indexLow];循环之前。
答案 1 :(得分:1)
你似乎遇到了两个问题。
正如其他答案中熟练指出的那样,您每次通过迭代都会重新创建数组。您需要在循环外部移动数组的声明和实例化。
但是现在,你又遇到了一个小问题。如果您的数字从3到10独占,那么您的数组中只有7个数字。这意味着数组的大小是indexLow
值的两倍。
这基本上意味着,您将数组声明语句更改为:
int[] myArray = new int[length - indexLow];
...跟随循环。
作为奖励,如果您使用的是Java 8,则可以利用IntStream
及其range
方法执行相同的操作:
int[] myArray = IntStream.range(indexLow, length).toArray();
答案 2 :(得分:0)
你有
for(int i=indexLow; i<indexLow+length; i++){
int[] myArray = new int[length+indexLow];
myArray[i] = i;
}
在每次循环迭代中创建一个新数组。它必须是
int[] myArray = new int[length+indexLow];
for(int i=indexLow; i<indexLow+length; i++){
myArray[i] = i;
}
所以你创建一次数组,并在循环期间填充每个元素。