在骑士巡回挑战中,从玩家当前所在的坐标向用户展示他们可以移动的位置
In the knights tour challenge, from the coordinates the player is currently on to show the user where they can move
这是我在骑士巡回赛游戏中的尝试,我在这里尝试做的是向用户展示他们可以从他们在阵列中的任何位置做出的动作。
问题出现在 if 语句中的 NextPos[x+1][y-2]!=null
,因为抛出了异常 java.lang.ArrayIndexOutOfBoundsException: -2
。
我知道数组在这个位置超出了范围,但这就是重点,所以它不会打印出这个位置可用。
我的问题是,有没有办法获得相同的结果*或捕获异常以使其通过?
*在if()中使用越界数组。
打印出来的数组是这样的:
1 2 3 4
A{0 0 0 0}
B{0 0 0 0}
C{0 0 0 0}
x
和 y
的值为 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;
}
}
}
首先,你得到了indexOutOfBound,你还是想跳过这一步。你可以计算并修复它。 AFA 你的问题,这里有一个快速解决方案。
添加检查
(y-2>0)
有
NextPos[x+1][y-2]!=null
因此将您的 if 条件更改为
(y-2>0) && NextPos[x+1][y-2]!=null
这是我在骑士巡回赛游戏中的尝试,我在这里尝试做的是向用户展示他们可以从他们在阵列中的任何位置做出的动作。
问题出现在 if 语句中的 NextPos[x+1][y-2]!=null
,因为抛出了异常 java.lang.ArrayIndexOutOfBoundsException: -2
。
我知道数组在这个位置超出了范围,但这就是重点,所以它不会打印出这个位置可用。
我的问题是,有没有办法获得相同的结果*或捕获异常以使其通过?
*在if()中使用越界数组。
打印出来的数组是这样的:
1 2 3 4
A{0 0 0 0}
B{0 0 0 0}
C{0 0 0 0}
x
和 y
的值为 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;
}
}
}
首先,你得到了indexOutOfBound,你还是想跳过这一步。你可以计算并修复它。 AFA 你的问题,这里有一个快速解决方案。
添加检查
(y-2>0)
有
NextPos[x+1][y-2]!=null
因此将您的 if 条件更改为
(y-2>0) && NextPos[x+1][y-2]!=null