数组索引超出范围异常2 Java和其他错误

时间:2014-10-06 03:38:10

标签: java arrays indexing

通过创建Bar.Class

的cmd行编译此代码
import java.util.Map;
import java.util.HashMap;

public class Bar {
    private static final String[][] pos = 
            new String[][] {{"X0","Y0"},{"X1","Y1"},{"X2","Y2"}};

    public Bar() {}

    public static String getAtPosition(int x, int y) {
        return pos[x][y];
    }


    public static void main(String[] args) {

        Bar bar = new Bar();

        try {
            for (int x = 0; x < pos.length; x++) {
                for (int y = 0; y < pos.length; y++) {
                    System.out.println(bar.getAtPosition(x,y));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

输入 java Bar

时出现以下错误
X0
Y0
java.lang.ArrayIndexOutOfBoundsException: 2
at Bar.getAtPosition<Bar.java:12>
at Bar.main<Bar.java:23>

此代码由我接受采访的公司提供,他们需要在运行时解释每个源代码行和程序结果的注释。

任何帮助都会受到赞赏,我只学了几天java,今天我花了好几个小时。

2 个答案:

答案 0 :(得分:0)

内部数组没有pos.length个元素。它有pos[0].length个元素。

尝试:

        for (int x = 0; x < pos.length; x++) {
            for (int y = 0; y < pos[0].length; y++) {
                System.out.println(bar.getAtPosition(x,y));
            }
        }

也就是说,为了访问私有静态数组的元素,然后直接访问私有数组以找到其范围,使用方法getAtPosition没有多大意义。您可以传递给该方法的数组索引。

答案 1 :(得分:0)

替换下面的

for (int y = 0; y < pos.length; y++)

使用此声明

for (int y = 0; y < pos[x].length; y++)

<强>输出

X0
Y0
X1
Y1
X2
Y2