Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在骑士巡演挑战中,从玩家当前所在的坐标向用户显示他们可以移动的位置_Java_Arrays_Project_Indexoutofboundsexception - Fatal编程技术网

Java 在骑士巡演挑战中,从玩家当前所在的坐标向用户显示他们可以移动的位置

Java 在骑士巡演挑战中,从玩家当前所在的坐标向用户显示他们可以移动的位置,java,arrays,project,indexoutofboundsexception,Java,Arrays,Project,Indexoutofboundsexception,这是我在骑士巡游游戏中的尝试,我在这里尝试的是向用户展示他们在阵列中的任何位置都可以做出什么动作 问题出现在NextPos[x+1][y-2]上=if语句中的null,因为引发异常java.lang.ArrayIndexOutOfBoundsException:-2 我知道数组在这个位置超出了边界,但这就是关键,所以它不会打印出这个位置是可用的 我的问题是,有没有办法获得相同的结果*或者捕获异常以使其通过 *在if()中使用越界数组 阵列在打印时如下所示: 1 2 3 4 A{0

这是我在骑士巡游游戏中的尝试,我在这里尝试的是向用户展示他们在阵列中的任何位置都可以做出什么动作

问题出现在
NextPos[x+1][y-2]上=if语句中的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;
        }

    }
}
publicstaticvoidmoveto(intx,inty,intboard[])){
TextIO.putln(“jhgkgk”);
字符串NextPos[][]={
{“A1”、“A2”、“A3”、“A4”},
{“B1”、“B2”、“B3”、“B4”},
{“C1”、“C2”、“C3”、“C4”}
};
对于(int i=0;i<9;i++)
{
开关(一){
案例1:
if(NextPos[x+1][y-2]!=null和&Board[x+1][y-2]==0){
putln(“测试代码是否达到了这个程度:3”);
text.putln(NextPos[x+1][y-2]);
}
打破
案例2:
if(NextPos[x+1][y+2]!=null和&Board[x+1][y+2]==0){
text.putln(NextPos[x+1][y+2]);
}
打破
案例3:
if(NextPos[x+2][y-1]!=null和&Board[x+2][y-1]==0){
text.putln(NextPos[x+2][y-1]);
}
打破
案例4:
if(NextPos[x+2][y+1]!=null和&Board[x+2][y+1]==0){
text.putln(NextPos[x+2][y+1]);
}
打破
案例5:
if(NextPos[x-1][y-2]!=null和&Board[x-1][y-2]==0){
text.putln(NextPos[x-1][y+2]);
}
打破
案例6:
if(NextPos[x-1][y+2]!=null和&Board[x-1][y+2]==0){
text.putln(NextPos[x+1][y+2]);
}
打破
案例7:
if(NextPos[x-2][y+1]!=null和&Board[x-2][y+1]==0){
text.putln(NextPos[x-2][y+1]);
}
打破
案例8:
if(NextPos[x-2][y+1]!=null和&Board[x-2][y+1]==0){
text.putln(NextPos[x-2][y+1]);
}
打破
}
}
}

首先,您将获得IndexAutofBound,但仍要跳过步骤。你可以找到并修复它。就你的问题而言,这里有一个快速解决方法

加支票

(y-2>0)

下一个目标[x+1][y-2]=空的

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

(y-2>0)和&NextPos[x+1][y-2]=空的


请正确格式化您的代码。另外,请阅读欢迎来到StackOverflow!与IndexOutfBoundsException关联的-2表示您正在将-2作为数组索引传递给NextPos。我猜当x的值为0时会发生这种情况,然后NextPos[x-2][y+1]会抛出此异常,或者当y为0时,会导致NextPos[x-1][y-2]抛出此异常。尝试添加一个if语句,在引用数组之前检查x和y的值。谢谢,我会进行调整,你真的帮了我大忙。