有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在尝试输出数组时会出现异常错误?

我已经编写了一个简单的代码,可以输出一个2D数组。 代码如下:

String month[];
int speedfines[][];

public int speedFines() {
    speedfines = new int[3][2];
    month = new String[2];

    month[0] = "JAN";
    month[1] = "FEB";
    month[2] = " MAR";

    speedfines[0][0] = 128;
    speedfines[0][1] = 135;
    speedfines[0][2] = 139;
    speedfines[1][0] = 155;
    speedfines[1][1] = 129;
    speedfines[1][2] = 175;
    speedfines[2][0] = 129;
    speedfines[2][1] = 130;
    speedfines[2][2] = 185;
    speedfines[3][0] = 195;
    speedfines[3][1] = 155;
    speedfines[3][2] = 221;

    System.out.println(Arrays.toString(speedfines));

    return 0;
}

当我运行这段代码时,线程错误中会出现java异常。 我使用的是netbeans 12.0,我的代码中没有任何错误,但运行时会出现异常错误 有人能给我解释一下java异常的含义吗?如果可能的话,如何修复它


共 (3) 个答案

  1. # 1 楼答案

    问题是您为数组monthspeedfines定义的大小

    例如,您将大小2定义为month,并尝试将3元素放入其中。要使代码正常工作,请将数组定义更改为:

    speedfines = new int [4][3];
    month = new String [3];
    
              -
    |      |      |     |     ⇒    Size = 3  /  month = new String [3]
              -
       ↑       ↑     ↑
       0       1     2
    
    
  2. # 2 楼答案

    你的month数组应该是:

    month = new String[3];
    

    将其设置为new String[2]时,允许2项位于数组中

    由于您在数组中设置了3项:

    month[0] = "JAN";
    month[1] = "FEB";
    month[2] = "MAR";
    

    它引发ArrayIndexOutOfBoundsException,因为此时索引2不存在

    此外,数组是在函数之外定义的。将它们移到函数内部

    代码应为:

    public int speedFines() {
        int speedfines[][] = new int[3][2];
        String month[] = new String[3];
    
        month[0] = "JAN";
        month[1] = "FEB";
        month[2] = "MAR";
    
        speedfines[0][0] = 128;
        speedfines[0][1] = 135;
        speedfines[0][2] = 139;
        speedfines[1][0] = 155;
        speedfines[1][1] = 129;
        speedfines[1][2] = 175;
        speedfines[2][0] = 129;
        speedfines[2][1] = 130;
        speedfines[2][2] = 185;
        speedfines[3][0] = 195;
        speedfines[3][1] = 155;
        speedfines[3][2] = 221;
    
        System.out.println(Arrays.toString(speedfines));
    
        return 0;
    }
    
  3. # 3 楼答案

    您在数组2dimation中保存了12项,因此需要执行此操作speedfines = new int [4][3]; 我认为例外名称是ArrayIndexOutOfBounds,当你放置一个数组的大小并给它比她的大小大的项目时,它会显示