-1

这是我在骑士巡回赛中的尝试,我在这里尝试做的是向用户展示他们可以从阵列中的任何位置做出哪些动作。

问题出现NextPos[x+1][y-2]!=null在 if 语句中,因为java.lang.ArrayIndexOutOfBoundsException: -2抛出了异常。

我知道数组在这个位置超出了界限,但这就是重点,所以它不会打印出这个位置可用。

我的问题是,有没有办法获得相同的结果*或捕获异常以使其通过?

*在 if() 中使用越界数组。

打印时数组如下所示:

   1  2  3  4
 A{0  0  0  0}
 B{0  0  0  0}
 C{0  0  0  0}

xy的值为0。Board 数组与 NextPos 数组大小相同,但它是一个 int 数组。

public static void MoveTo(int x, int y, int Board[][]) {
    TextIO.putln("jhgkgk");
    String NextPos[][] = {
            {"A1", "A2", "A3", "A4"},
            {"B1", "B2", "B3", "B4"},
            {"C1", "C2", "C3", "C4"}
    };


    for (int i = 0; i < 9; i++)
    {
        switch (i) {

            case 1:
                if (NextPos[x + 1][y - 2] != null && Board[x + 1][y - 2] == 0) {
                    TextIO.putln("test to see if the code gets this far :3");
                    TextIO.putln(NextPos[x + 1][y - 2]);
                }
                break;

            case 2:
                if (NextPos[x + 1][y + 2] != null && Board[x + 1][y + 2] == 0) {
                    TextIO.putln(NextPos[x + 1][y + 2]);
                }
                break;

            case 3:
                if (NextPos[x + 2][y - 1] != null && Board[x + 2][y - 1] == 0) {
                    TextIO.putln(NextPos[x + 2][y - 1]);
                }
                break;

            case 4:
                if (NextPos[x + 2][y + 1] != null && Board[x + 2][y + 1] == 0) {
                    TextIO.putln(NextPos[x + 2][y + 1]);
                }
                break;
            case 5:
                if (NextPos[x - 1][y - 2] != null && Board[x - 1][y - 2] == 0) {
                    TextIO.putln(NextPos[x - 1][y + 2]);
                }
                break;

            case 6:
                if (NextPos[x - 1][y + 2] != null && Board[x - 1][y + 2] == 0) {
                    TextIO.putln(NextPos[x + 1][y + 2]);
                }
                break;
            case 7:
                if (NextPos[x - 2][y + 1] != null && Board[x - 2][y + 1] == 0) {
                    TextIO.putln(NextPos[x - 2][y + 1]);
                }
                break;
            case 8:
                if (NextPos[x - 2][y + 1] != null && Board[x - 2][y + 1] == 0) {
                    TextIO.putln(NextPos[x - 2][y + 1]);
                }
                break;
        }

    }
}
4

1 回答 1

0

首先,你得到了 indexOutOfBound,但你仍然想跳过这一步。您可以计算并修复它。AFA 您的问题很关心,这里有一个快速解决方案。

添加支票

(y-2>0)

NextPos[x+1][y-2]!=null

因此,将您的 if 条件更改为

(y-2>0) && NextPos[x+1][y-2]!=null

于 2015-04-15T20:14:07.447 回答