0

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

4

3 回答 3

0

没有检查代码中num3和的值num4num1正如我所设想的那样添加适当的限制,你不会让它们num2分别更大。

如果 num3 或 num4 的值超出限制,您将获得ArrayIndexOutOfBoundException.

于 2012-12-12T04:50:52.867 回答
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在示例中)都是一个数组,因此上面的代码将循环遍历它们,用零填充它们,利用类的fill方法Arrays,您需要如示例中所示导入该方法。

于 2012-12-12T04:53:52.320 回答
0

num4 == num2当您检查时,这会失败num4 > 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;
        }
    }
于 2012-12-12T04:54:24.380 回答