【问题标题】:Array index out of bounds exception 2 Java and other errors数组索引越界异常2 Java等错误
【发布时间】:2014-11-30 07:53:51
【问题描述】:

通过创建 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>

此代码由我采访过的一家公司提供,他们要求 cmets 解释每个源代码行以及程序运行时的结果。

任何帮助将不胜感激,我才学习 java 几天,今天我花了几个小时。

【问题讨论】:

  • 在面试测试中给出答案是作弊。我会通过要求您查看 pos 来为您指明正确的方向。它是一个矩阵,但矩阵的大小是多少?这可能有助于您理解问题。
  • 查看this link 以获得答案。
  • 感谢二维数组的链接,我将按照建议查看矩阵大小。我并不是想作弊,尽管我只是想利用我所有的资源来证明我可以解决问题。 :-)
  • 问题还要求解释结果中的异常,然后询问是哪一行导致异常?有什么建议吗?

标签: java arrays indexing


【解决方案1】:

替换下面的

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

用这个声明

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

输出

X0
Y0
X1
Y1
X2
Y2

【讨论】:

    【解决方案2】:

    内部数组没有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 方法来访问私有静态数组的元素,然后直接访问私有数组以查找数组索引的范围并没有多大意义传递给那个方法。

    【讨论】:

    • 它告诉我解释结果中的异常以及导致它的行。结果似乎没有异常 x0 y0 x1 y1 x2 y2
    • @This_isWater getAtPosition(0,2) 会给你一个 ArrayIndexOutOfBoundsExceptions,因为你的数组有三行但只有两列。
    • @This_isWater 如果您按照我的建议修复了代码,则不会出现此异常。
    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多