【问题标题】:Can't find the ArrayIndexOutOfBoundsException: 5 in my loop在我的循环中找不到 ArrayIndexOutOfBoundsException: 5
【发布时间】:2017-11-07 12:50:16
【问题描述】:

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

问题是,我找不到ArrayIndexOutOfBoundsException。它必须在循环中的任何位置。我使用了一个 5x5 二维数组并从 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;
}

【问题讨论】:

  • 也许if( i &lt;= matrix.length){应该是if( i &lt; matrix.length){
  • 在调试器中运行它。这就是他们的目的
  • 已经试过了,还是一样的错误。不过还是谢谢你的回复!也调试了它,但不知道如何更改它。
  • 可以添加错误的stacktrace
  • 发布minimal reproducible example 以获得帮助。

标签: java arrays multidimensional-array


【解决方案1】:

您必须注意,在 Java 中,数组的索引从 0 到长度为 1,因此您的数组大小为 5,0, 1, 2, 3, 4

在您的循环中,您正在检查:

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 = 5 设置为 5 &lt; 5+1

【讨论】:

    【解决方案2】:

    在这行之前打勾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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-19
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        相关资源
        最近更新 更多