用户定义的二维数组 (Java) 大小



我是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] 不存在。提前谢谢。

您没有正确检查num3num4(它们都被允许达到上限),因此它们最终会超出界限。

既然你只是想用零填充你的数组,为什么不考虑以下代码:

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 方法,您需要导入该方法,如示例中所示。

不会检查代码中的 num3num4 值。按照我的设想添加适当的限制,您不会分别num1num2

它们更大。

如果 num3 或 num4 的值超出限制,则得到ArrayIndexOutOfBoundException

当您

检查num4 > num2num4 == num2时,这将失败;因为num2是数组的长度,而索引转到length-1num3num1比较也是如此。在比较中使用num2-1num1-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;
        }
    }

最新更新