我是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]不存在。提前谢谢。
答案 0 :(得分:0)
您的代码中没有检查num3
和num4
的值。如我所设想的那样添加适当的限制,你不应该分别在num1
和num2
之间做出更大的限制。
如果num3或num4的值超出限制,则会获得ArrayIndexOutOfBoundException
。
答案 1 :(得分: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
)都是一个数组,上面的代码将遍历它们,用零填充它们,利用fill
类的Arrays
方法,您需要导入,如示例所示。
答案 2 :(得分:0)
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;
}
}