我是Java的新手,我正在尝试制作一个大小由用户定义的数组。我通过用零填充整个数组并从那里移动来盯着。我应该怎么做?我现在拥有的类似于:(输入是我的扫描仪对象)
int num1, num2, num3 = 0, num4 = 0, active = 0;
num1 = input.nextInt();
num2 = input.nextInt();
int[][] ver = new int[num1][num2];
while(active == 0){
ver [num3][num4] = 0;
++num4;
if(num4 > num2){
++num3;
num4 = 0;
}
if(num3 > num1){
++active
}
}
这一直给我一个 ArrayIndexOutOfBoundsException:0,让我觉得 ver[0][0] 不存在。提前谢谢。
您没有正确检查num3
和num4
(它们都被允许达到上限),因此它们最终会超出界限。
既然你只是想用零填充你的数组,为什么不考虑以下代码:
import java.util.Arrays;
// ...
int num1 = 2; // fixed number just for test purposes
int num2 = 2; // fixed number just for test purposes
int[][] ver = new int[num1][num2];
for (int[] row: ver)
Arrays.fill(row, 0);
System.out.println(ver[0][0]); // prints 0 as expected
由于每个子数组(示例中row
)都是一个数组,因此上面的代码将遍历它们,用零填充它们,利用 Arrays
类的 fill
方法,您需要导入该方法,如示例中所示。
不会检查代码中的 num3
和 num4
值。按照我的设想添加适当的限制,您不会分别num1
和num2
如果 num3 或 num4 的值超出限制,则得到ArrayIndexOutOfBoundException
。
检查num4 > num2
时num4 == num2
时,这将失败;因为num2
是数组的长度,而索引转到length-1
。num3
和num1
比较也是如此。在比较中使用num2-1
和num1-1
,如下所示:
int num1=0, num2=0, num3=0,num4=0;
num1 = input.nextInt(); //<--Input a value >0
num2 = input.nextInt(); //<--Input a value >0
int[][] ver = new int[num1][num2];
int active = 0;
while(active == 0){
ver[num3][num4] = 0;
++num4;
if(num4 > num2-1){ // or if(num4 >= num2)
++num3;
num4 = 0;
}
if(num3 > num1-1){ // or if(num3 >= num1)
++active;
}
}