![](/img/trans.png)
[英]How to encode a two-dimensional boolean array to a one-dimensional array and later decode it in java?
[英]Java Two Dimensional Array Boolean
我的功课是创造(并非如此)康威生活游戏的简单娱乐方式。 确切说明:
- 提示用户输入(i,j)对(两个非负整数)对的列表(当为i或j读取负整数时停止)
- 提示用户输入时间步数
- 根据用户输入的(i,j)对初始化网格
- 显示网格的初始状态(调用
displayGrid()
方法)- 对于每个时间步,根据Conway的规则更
updateGrid()
格(调用updateGrid()
方法)并显示网格(调用displayGrid()
方法)
我的程序输出现已更改:
Please enter list of (i, j) pairs for populated cells(negative i or j to quit):
6 4 6 5 6 6 6 7 6 8
-1 -1
Enter number of time steps:
2
Initial Grid:
######
Time step 1
Time step 2
我的新问题是什么使我的代码“杀死”一切? 为什么没有“真”?
这是我的代码:
java.util.Scanner;
class P8{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
boolean[][] multi = new boolean[10][10];
int i, j, N, x, y, h;
for(x=1; x<multi.length; x++){
for(y=1; y<multi.length; y++){
multi[x][y] = false;
}
}
System.out.println("Please enter list of (i, j) pairs for populated cells(negative i or j to quit):");
while(true){
i = in.nextInt();
j = in.nextInt();
if(i <= 0 || j <= 0){
break;}
multi[i][j] = true;
}
System.out.println("Enter number of time steps:");
N = in.nextInt();
System.out.println("Initial Grid: \n");
displayGrid(multi);
for(i = 1; i<N+1; i++){
System.out.printf("Time step %d\n", i);
updateGrid(multi);
displayGrid(multi);
System.out.println("\n");
}
}
/******************************************
void updateGrid(boolean mat[][]); updates
the 2 dimensional array using Conway's
standard rules. Does this by calling
"neighbors" function
******************************************/
public static void updateGrid(boolean mat[][]){
boolean[][] temp = new boolean[mat.length][mat.length];
int i, j, row, col, n=0;
for(row = 0; row < mat.length; row++){
for(col = 0; col < mat.length; col++){
neighbors(mat, row, col);
if(n>=4 || n<=1)
mat[row][col] = false;
else
mat[row][col] = true;
}
}
}
/******************************************
void neighbors(boolean mat[][]int row, int col)
checks how many "neighbors" are around a given point
******************************************/
public static int neighbors(boolean mat[][], int row, int col){
int N =0;
if((row-1 >= 0)&&(col-1 >= 0))
N = mat[row-1][col-1] ? N + 1 : N;
if((row >=0)&&(col-1 >= 0))
N = mat[row][col-1] ? N+1 : N;
if((row+1 < mat.length)&&(col-1 >= 0))
N = mat[row+1][col-1] ? N+1 : N;
if((row+1 < mat.length)&&(col < mat[0].length))
N = mat[row+1][col] ? N+1 : N;
if((row+1 < mat.length)&&(col+1 < mat[0].length))
N = mat[row+1][col+1] ? N+1 : N;
if((row < mat.length)&&(col+1 < mat[0].length))
N = mat[row][col+1] ? N+1 : N;
if((row-1 >= 0)&&(col+1 < mat[0].length))
N = mat[row-1][col+1] ? N+1 : N;
if((row-1 >= 0)&&(col < mat[0].length))
N = mat[row-1][col] ? N+1 : N;
return N;
}
/******************************************
void displayGrid(int mat[][]) prints out
a two dimensional array
******************************************/
public static void displayGrid(boolean mat[][]){
int x, y;
for(x=1; x<mat.length; x++){
for(y = 1; y<mat.length; y++){
if(mat[x][y])
System.out.printf("#");
else
System.out.printf(" ");
}
System.out.println();
}
}
}
`
我的问题是我的代码中multi [] []在哪里变成“真”,因为这是我必须打印“#”的标准
在您的displayGrid
方法中。
if(mat[x][y]= true)
是一个赋值,而不是一个比较。
采用
if (mat[x][y])
代替。
您永远不需要写bool == true
(或bool == false
),因为您可以更轻松地将它们写为bool
(和!bool
)-后一种形式可以避免漏掉=
号之一并更改。表达式的语义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.