在我的循环中找不到ArrayIndexOutOfBoundsException:5

时间:2017-11-07 12:50:16

标签: java arrays multidimensional-array

所以我试图解决名人问题。你有一个2d数组填充0和1.行(=人)只包含1,是名人。 如果没有,则int n为0,并且将是行仅包含1的2d数组的列号。

问题是,我无法找到ArrayIndexOutOfBoundsException。它必须在循环中的任何地方。我使用了5x5 2d数组并以i = 0开头。 该循环仅在i : 3之前有效,然后抛出异常。

public int startSearch(int[][] matrix , int i) {
    int j = 0;
    int n = 0;
    int esc = 0;

    while(esc == 0) {
        if(matrix[i][j] == 1) {
            j++;

            if( j >= (matrix.length +1) ) {
                n = i+1;
                esc = 1;
            }
        }

        if(matrix[i][j] == 0) {
            esc = 1;
        }
    }

    i++;
    if( i <= matrix.length) {
        System.out.println("i : " +i);
        System.out.println(n);
        startSearch(matrix, i);
    }
    return n;
}

3 个答案:

答案 0 :(得分:0)

您必须注意,在 Java 中,数组的索引从0到length-1 ,所以0, 1, 2, 3, 4用于大小为5的数组。

在循环中,您正在检查:

if( j >= (matrix.length +1) ) {
    n = i+1;
    esc = 1;
}

// and 

if( i <= matrix.length){    
    System.out.println("i : " +i);
    System.out.println(n);
    startSearch(matrix, i);
}

你应该检查:

if( j >= matrix.length ) {
    n = i+1;
    esc = 1;
}

// and 

if( i < matrix.length){    
    System.out.println("i : " +i);
    System.out.println(n);
    startSearch(matrix, i);
}

否则,例如,对于i = 3,您可能j = 55 < 5+1

答案 1 :(得分:0)

在此行if(matrix[i][j] == 1)

之前进行检查
if(i<matrix.length && j<matrix[i].length)
{
if(matrix[i][j] == 1)
{
//rest all same

同时在此行if(matrix[i][j] == 0){

之前进行检查
if(i<matrix.length && j<matrix[i].length)
{
if(matrix[i][j] == 0){
//rest all same

答案 2 :(得分:0)

可能是这一行:if(j >= (matrix.length + 1)){

当j == matrix.length + 1时j将进入此if循环,在此之前,访问matrix[i][matrix.length]将导致ArrayIndexOutOfBoundsException,因为长度为n的数组的索引在[0,n]之间 - 1],当你试图获得索引n的值时肯定会出错。