簡體   English   中英

修復數組的索引超出范圍?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM