代码尚未完成,但我在算法中遇到了一些奇怪的问题。当它循环时,每次都会在邻居5的同一位置崩溃,除非我将游戏制作为3×3。我不确定循环出了什么问题,看起来算法应该可以工作,并且到目前为止编程正确。
package dsa.hw1;
import java.util.Random;
import java.util.Scanner;
public class DSAHW1 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.println("what would you like to be the height?");
int height = kb.nextInt();
System.out.println("what would you like to be the width?");
int width = kb.nextInt();
boolean[][] GameBoard = new boolean[height][width];
Random number = new Random();
for(int i =0; i < GameBoard.length; i++){
for(int j = 0; j < GameBoard[i].length; j++){
int theRandomNumber = number.nextInt(2);
System.out.print(theRandomNumber);
if(theRandomNumber == 1){
GameBoard[i][j] = true;
}
else{
GameBoard[i][j] = false;
}
}
}
System.out.println("");
String[][] Display = new String[height][width];
for(int i =0; i < GameBoard.length; i++){
for(int j = 0; j < GameBoard[i].length; j++){
if(GameBoard[i][j]){
Display[i][j] = "*";
}
else{
Display[i][j] = "-";
}
System.out.print(Display[i][j] + " ");
}
System.out.println("");
}
int heightAlg = height -1;
int widthAlg = width - 1;
//algorithm
int neighbors1 = 0, neighbors2 = 0, neighbors3 = 0, neighbors4 = 0, neighbors5 = 0;
int neighbors6 = 0, neighbors7 = 0, neighbors8 = 0, neighbors9 = 0, neighbors10 = 0;
for(int i =0; i < widthAlg; i++){
for(int j = 0; j < heightAlg; j++){
if(i == 0 & j == 0){
if(GameBoard[i][j++]) {neighbors1++;}
if(GameBoard[i++][j]) {neighbors1++;}
if(GameBoard[i++][j++]) {neighbors1++;}
}
else if( i == 0 && j > 0 && j < widthAlg ){
if(GameBoard[i][j--]) {neighbors2++;}
if(GameBoard[i++][j--]) {neighbors2++;}
if(GameBoard[i][j++]) {neighbors2++;}
if(GameBoard[i++][j]) {neighbors2++;}
if(GameBoard[i++][j++]) {neighbors2++;}
}
else if(i == 0 && j == widthAlg){
if(GameBoard[i][j--]) {neighbors3++;}
if(GameBoard[i++][j--]) {neighbors3++;}
if(GameBoard[i++][j]) {neighbors3++;}
}
else if( i > 0 && i < heightAlg && j == 0 ){
if(GameBoard[i--][j]) {neighbors4++;}
if(GameBoard[i][j++]) {neighbors4++;}
if(GameBoard[i--][j++]) {neighbors4++;}
if(GameBoard[i++][j]) {neighbors4++;}
if(GameBoard[i++][j]) {neighbors4++;}
}
else if( i > 0 && i < heightAlg && j > 0 && j < widthAlg ){
if(GameBoard[i--][j--]) {neighbors5++;}
if(GameBoard[i--][j]) {neighbors5++;}
if(GameBoard[i][j++]) {neighbors5++;}
if(GameBoard[i--][j++]) {neighbors5++;}
if(GameBoard[i++][j]) {neighbors5++;}
if(GameBoard[i++][j]) {neighbors5++;}
}
else if( i > 0 && i < heightAlg && j == widthAlg ){
if(GameBoard[i--][j]) {neighbors6++;}
if(GameBoard[i--][j--]) {neighbors6++;}
if(GameBoard[i++][j]) {neighbors6++;}
if(GameBoard[i][j--]) {neighbors6++;}
if(GameBoard[i++][j--]) {neighbors6++;}
}
else if( i==0 && j == heightAlg ){
if(GameBoard[i--][j]) {neighbors7++;}
if(GameBoard[i][j++]) {neighbors7++;}
if(GameBoard[i--][j--]) {neighbors7++;}
}
else if( i == heightAlg && j > 0 && j < widthAlg ){
if(GameBoard[i][j--]) {neighbors8++;}
if(GameBoard[i--][j]) {neighbors8++;}
if(GameBoard[i--][j++]) {neighbors8++;}
if(GameBoard[i--][j]) {neighbors8++;}
if(GameBoard[i][j++]) {neighbors8++;}
}
else if( i == heightAlg && j == widthAlg ){
if(GameBoard[i][j--]) {neighbors9++;}
if(GameBoard[i--][j--]) {neighbors9++;}
if(GameBoard[i--][j]) {neighbors9++;}
}
}
}
}
}
最佳答案
看这段代码:
if(GameBoard[i--][j--]) {neighbors5++;}
if(GameBoard[i--][j]) {neighbors5++;}
if(GameBoard[i][j++]) {neighbors5++;}
您访问 (i, j)、(i - 1, j - 1)、(i - 2, j - 1) 个单元格。
如果i == 1
它显然会崩溃,因为它尝试访问索引-1
的元素。
关于java - 循环算法中的康威生命游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731217/