[英]Fix Index out of bounds for array?
我正在使用 eclipse 控制台創建迷宮游戲。 我正在嘗試移動玩家,並為玩家保存新的 position,這樣我就可以將他移動到另一個方向。 但是,每次我嘗試移動播放器時,我都會得到索引 ___ 超出長度 5(通常為 -1 或 5)的范圍。 它正在跳過整個數組,我不確定如何修復它。
運行時,它會打印以下內容
P.. . .
. . . . .
. . . . .
. . . 噸。
. . ! ! .
請 select 以下之一:
按 1 向上移動。
按 2 向下移動。
按 3 向左移動。
按 4 向右移動。
按 0 停止游戲。
我只列出了一個機芯,但 rest 是相同的,具有互換變量。 每個選項都返回索引超出范圍。 有人建議我創建一個“檢查”系統,但這並不能解決問題。 它只是運行程序而不允許任何動作,因為每個動作都會返回出界。 我相信這與線路有關
mazeStructure[vxTemp][vyTemp] = mazeStructure[i][k-1];
無論是那個還是與 for 條件有關的東西。 如果有人可以提供修復,將不勝感激。
Scanner input = new Scanner(System.in);
int rowsTotal = 5;
int columnsTotal = 5;
int vxTemp = 0;
int vyTemp = 0;
String[][] mazeStructure = {
{"P",".",".","!","."},
{".",".",".",".","."},
{".",".",".","!","."},
{"!","!",".","T","."},
{"!",".","!","!","."},
};
boolean won = false;
while (won == false){
for (int a = 0; a < rowsTotal; a++){
for (int b = 0; b < columnsTotal; b++){
System.out.print(mazeStructure[a][b]);
System.out.print(" ");
}
System.out.print("\n");
}
System.out.printf("\n");
System.out.println("Please select one of the following:");
System.out.println("Press 1 to move up.");
System.out.println("Press 2 to move down.");
System.out.println("Press 3 to move left.");
System.out.println("Press 4 to move right.");
System.out.println("Press 0 to stop playing the game.");
int choice = input.nextInt();
int a = 0;
if (choice == 1 && a >= 0 && a < columnsTotal){
for (int i = 0; i < rowsTotal; i++){
for (int k = 0; k < columnsTotal; k++){
if (mazeStructure[vxTemp][vyTemp-1].equals("!") == false && mazeStructure[i][k].equals(mazeStructure[vxTemp][vyTemp])){
mazeStructure[vxTemp][vyTemp] = ".";
mazeStructure[vxTemp][vyTemp-1] = "P";
mazeStructure[vxTemp][vyTemp] = mazeStructure[i][k-1];
}else if (mazeStructure[vxTemp][vyTemp-1] == "!"){
System.out.println("Move isn't allowed.");
}else {
continue;}
在if (mazeStructure[vxTemp][vyTemp-1].equals(".") == false && mazeStructure[i][k].equals(mazeStructure[vxTemp][vyTemp])){
您嘗試訪問mazeStructure
在[vxTemp][vyTemp-1]
。 您將vyTemp
初始化為 0,並且在此之前它不會改變。 您通過嘗試vyTemp - 1
開始該循環,這將是 -1。 這將超出您的數組的范圍。
您對循環中的變量k
執行相同的操作。 k
附近的第一次將為零。 因此,盡管存在k - 1
是可以的,但您不能嘗試訪問某個 -1 索引處的任何數組。
我猜問題出在這一行的vyTemp-1
if (mazeStructure[vxTemp][vyTemp-1].equals(".") == false && mazeStructure[i][k].equals(mazeStructure[vxTemp][vyTemp])){
vyTemp 的值最初為 0
Scanner input = new Scanner(System.in);
int rowsTotal = 5;
int columnsTotal = 5;
int vxTemp = 0;
int vyTemp = 0;
String[][] mazeStructure = {
{"P",".",".","!","."},
{".",".",".",".","."},
{".",".",".","!","."},
{"!","!",".","T","."},
{"!",".","!","!","."},
};
boolean won = false;
while (won == false){
for (int a = 0; a < rowsTotal; a++){
for (int b = 0; b < columnsTotal; b++){
System.out.print(mazeStructure[a][b]);
System.out.print(" ");
}
System.out.print("\n");
}
System.out.printf("\n");
System.out.println("Please select one of the following:");
System.out.println("Press 1 to move up.");
System.out.println("Press 2 to move down.");
System.out.println("Press 3 to move left.");
System.out.println("Press 4 to move right.");
System.out.println("Press 0 to stop playing the game.");
int choice = input.nextInt();
int a = 0;
if (choice == 1 && a >= 0 && a < columnsTotal){
for (int i = 0; i < rowsTotal; i++){
for (int k = 0; k < columnsTotal; k++){
//if條件有錯誤。 如果您的選擇是 1。如果條件 'mazeStructure[vxTemp][vyTemp-1].equals(".")',它將運行此命令。 由於 vyTemp = 0. vyTemp -1 < 0. 這將 java.lang.ArrayIndexOutOfBoundsException
if (mazeStructure[vxTemp][vyTemp-1].equals("!") == false && mazeStructure[i][k].equals(mazeStructure[vxTemp][vyTemp])){
mazeStructure[vxTemp][vyTemp] = ".";
mazeStructure[vxTemp][vyTemp-1] = "P";
mazeStructure[vxTemp][vyTemp] = mazeStructure[i][k-1];
}else if (mazeStructure[vxTemp][vyTemp-1] == "!"){
System.out.println("Move isn't allowed.");
}else {
continue;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.