【问题标题】:Keep getting ArrayIndexOutOfBoundsException不断收到 ArrayIndexOutOfBoundsException
【发布时间】:2017-11-03 08:40:48
【问题描述】:

我正在尝试创建一个输出模式的数组,该模式取决于我为输入提供的行数和列数,当它到达第三种方法时我收到错误。我知道数组从索引零开始,如果我为矩阵输入 (0 0) 它超出了界限,但我不知道如何解决这个问题。感谢您的帮助!

这是我的头等舱代码:

public class Transpose {

    public static int [][] createPatterned2DArray(int rows, int cols) 
        {
            int [][] table = new int [rows] [cols];                     
            for (int numRows = 0; numRows < table.length; numRows++){   
                for (int numCols = 0; numCols < table[0].length; numCols++){

                    table [numRows][numCols] = 10 + rows*(numRows +1) + numCols; 

                }
            }
            return table; 
        }


        public static void print2DArray (int[][] matrix) 
        { 
            for (int row = 0; row < matrix.length; row++)
            {
                for (int col = 0; col < matrix[0].length; col++)
                {
                    System.out.printf("%-4d",matrix[row][col]);
                }
                System.out.println();
            }

        }
        public static void print2DArrayTransposed(int [][] matrix)
        {   
            for (int row = 0; row < matrix[0].length; row++)
            { 
                for (int col = 0; col < matrix.length; col++)
                {
                    //try { 
                    //  if (matrix[0] == 0) {
                        //  System.out.println(matrix[0][0]); 
                    //  throw new Exception();
                        System.out.printf("%-4d",matrix [col][row]);
                    //  }
                    //catch (Exception e){
                    //  System.out.print(e);
                    }
                    System.out.println();

            }
        }
}

这里是第二类:

import java.util.*;
public class TestTranspose extends Transpose {

  public static void main(String[] args) 
  { 
    Scanner scan = new Scanner (System.in);
    int rows = scan.nextInt(); 
    int cols = scan.nextInt(); 

    int [][] table = createPatterned2DArray(rows,cols);  
    print2DArray(table);
    System.out.println();
    print2DArrayTransposed(table);
    System.out.println();
  } 
}

这是我遇到的错误,它让我发疯! 当我为数组输入 (0 0) 的输入时,我似乎无法理解如何抛出异常或使输出不显示任何内容。如何更正这行代码不允许我输出 (0 0) 的数组?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Transpose.print2DArrayTransposed(Transpose.java:32)
at TestTranspose.main(TestTranspose.java:13)

【问题讨论】:

    标签: java arrays exception multidimensional-array indexoutofboundsexception


    【解决方案1】:

    如果不首先确保matrix.length != 0,您将无法安全地执行matrix[0].length。在您的其他两种方法中,row 上的外部循环会处理此问题。

    但是在print2DArrayTransposed 中,你的外部循环正在尝试执行row &lt; matrix[0].length;即使matrix.length == 0,也没有什么可以阻止它尝试这样做。您可以通过以下两种方式之一解决此问题:在print2DArrayTransposed 的顶部添加此早期救助:

    if (matrix.length == 0)
        return;
    

    或将“行”上的外部循环更改为:

    for (row = 0; matrix.length > 0 && row < matrix[0].length; ++row)  
    

    【讨论】:

    • 非常感谢!我有一些类似的东西,但我无法为我的生活弄清楚:)
    【解决方案2】:

    看看Transpose.print2DArrayTransposed()方法中的这行代码:

    for (int row = 0; row < matrix[0].length; row++)
    

    您正试图访问matrix 的第一个元素,但没有元素,因为长度为零。

    一个 0x0 数组是有效的,所以不需要一开始就禁止创建数组。我的建议是在方法的开头简单地检查matrix 的长度是否为零,如果是,则返回,因为没有可打印的内容(或打印一些有用的消息)。

    public static void print2DArrayTransposed(final int[][] matrix) {
        if (matrix.length == 0) {
            return;
        }
        //...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2014-12-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多