0

我正在嘗試爲我的java編程類做一些生活項目的遊戲,我想我已經擁有了一切,但由於某種原因,我仍然得到一個超出界限的例外,即使我沒有任何數字大於指標。想知道爲什麼它會拋出這個錯誤?數組索引超出界限Java遊戲人生?

代碼:

項目4:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Arrays; 
import java.util.Scanner; 

public class Project4 { 

    public static void main(String[] args) throws IOException { 
     Scanner input = new Scanner(System.in); // Created a scanner 
     System.out.println("Enter the file name you would like to use"); 
     File file = new File(input.nextLine()); // Takes file name to find file 
     Scanner inputFromFile = new Scanner(file); 
     FileInputStream fileInput = new FileInputStream(file); // reads file 
     int r; 
     int y = 0; 
     int i = 0; 
     while ((r = fileInput.read()) != -1) { // goes through each character in 
               // file, char by char 
      char c = (char) r; 
      GameOfLife.grid[i][y] = c; 
      y++; 
      if (y == 75) { 
       y = 0; 
       i++; 
       if (i == 25) { 
        break; 
       } 
      } 
     } 
     // Prints the initial environment 
     System.out.println("Initial set: "); 
     for (int j = 0; j < GameOfLife.grid.length; j++) { 
      System.out.print(GameOfLife.grid[j]); 
     } 

     System.out.println("Do you want to see the next generation? Y/N?"); 
     String q = input.nextLine(); 
     if (q.equalsIgnoreCase("y")) { 
      GameOfLife.evolve(); 
     } else { 
      System.exit(0); 
     } 
    } 
} 

GameOfLife:

import java.util.Arrays; 

public class GameOfLife { 

    static final int m = 25; // number of rows 
    static final int n = 75; // number of columns 
    static char[][] grid = new char[m][n]; // Creates an empty (no dots or 
              // X's)grid of rows and columns. 

    static int count_neighbors(int i, int j) { 
     int nn = 0; // number of neighbors of cell(i,j) 

     if (grid[i - 1][j - 1] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i - 1][j] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i - 1][j + 1] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i][j - 1] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i][j + 1] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i + 1][j - 1] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i + 1][j] == 'X') { 
      nn++; 
     } 
     ; 
     if (grid[i + 1][j + 1] == 'X') { 
      nn++; 
     } 

     return nn; 
    } 

    static void evolve() { 
     for (int i = 0; i < 23; i++) { 
      for (int j = 0; j < 73; j++) { 
       int s = count_neighbors(i, j); 
       if (s < 2) { 
        grid[i][j] = '.'; 
       } 
       if (s == 2 || s == 3) { 
        grid[i][j] = 'X'; 
       } 
       if (s > 3) { 
        grid[i][j] = '.'; 
       } 
      } 
      for (int j = 0; j < GameOfLife.grid.length; j++) 
       System.out.print(GameOfLife.grid[j]); 
     } 

    } 

} 

回答

1

爲了擴大在安東的帖子,而你需要還指望角落的鄰居,你必須考慮的事實,你是在角落裏,只能算某種方面:

static int count_neighbors(int i, int j) { 
    int nn = 0; // number of neighbors of cell(i,j) 

    if (i > 0 && j > 0 && grid[i - 1][j - 1] == 'X') { 
     nn++; 
    } 
    ; 
    if (i > 0 && grid[i - 1][j] == 'X') { 
     nn++; 
    } 
    ; 
    if (i > 0 && j < 72 && grid[i - 1][j + 1] == 'X') { 
     nn++; 
    } 
    ; 
    if (j > 0 && grid[i][j - 1] == 'X') { 
     nn++; 
    } 
    ; 
    if (j < 72 && grid[i][j + 1] == 'X') { 
     nn++; 
    } 
    ; 
    if (j > 0 && i < 22 && grid[i + 1][j - 1] == 'X') { 
     nn++; 
    } 
    ; 
    if (i < 22 && grid[i + 1][j] == 'X') { 
     nn++; 
    } 
    ; 
    if (i < 22 && j < 72 && grid[i + 1][j + 1] == 'X') { 
     nn++; 
    } 

    return nn; 
} 
+0

忘記占上限,這應該現在工作,適當地給你的角落和外部行 – Michael

0

你在你的evolve方法調用上(0,0)count_neighbors。順便說一下,我非常肯定,編譯器會爲您提供引發此異常的位置。

+0

會變成這樣只需要在i> 0時允許它調用[i-1]來解決? –

+0

它會解決你得到的錯誤,但它不會給你答案的邊界元素。您應該添加檢查,以便不計算超出界限的鄰居。 – antonpp