我在制作用于游戏的桌子时遇到了麻烦。它需要
@
,#
,*
O
。 表格需要10 x 10个方格,差距应填入.
应该看起来像这样:
1 2 3 4 5 6 7 8 9 10 1 . @ . * . . . . . . 2 . . . . . # . . O . 3 . . . . . . . . . . 4 . . . . . . . . . . 5 . . . # . . @ . . . 6 . . O . . . . . . . 7 . . . . O . . . O . 8 . . . . . . * . . . 9 . * . . . . . . . . 10 . . . . . . . @ . .
我还需要能够最后移动章节。这是我的醋栗代码。但我只能得到它.
和@
,否则我只会出错。即使使用else if
:
package test;
import java.util.Scanner;
public class Test {
public static void show(boolean[][] grid) {
String s = "";
for (boolean[] row : grid) {
for (boolean col : row)
if (col)
s += "@ ";
else
s += ". ";
s += "\n";
}
System.out.println(s);
}
public static boolean[][] gen() {
boolean[][] grid = new boolean[10][10];
for (int r = 0; r < 10; r++)
for (int c = 0; c < 10; c++)
if (Math.random() > 0.2)
grid[r][c] = true;
return grid;
}
public static void main(String[] args) {
boolean[][] world = gen();
show(world);
System.out.println();
world = nextGen(world);
show(world);
Scanner s = new Scanner(System.in);
while (s.nextLine().length() == 0) {
System.out.println();
world = nextGen(world);
show(world);
}
}
public static boolean[][] nextGen(boolean[][] world) {
boolean[][] newWorld
= new boolean[world.length][world[0].length];
int num;
for (int r = 0; r < world.length; r++) {
for (int c = 0; c < world[0].length; c++) {
num = numNeighbors(world, r, c);
if (occupiedNext(num, world[r][c]))
newWorld[r][c] = true;
}
}
return newWorld;
}
public static boolean occupiedNext(int numNeighbors, boolean occupied) {
if (occupied && (numNeighbors == 2 || numNeighbors == 3))
return true;
else if (!occupied && numNeighbors == 3)
return true;
else
return false;
}
private static int numNeighbors(boolean[][] world, int row, int col) {
int num = world[row][col] ? -1 : 0;
for (int r = row - 1; r <= row + 1; r++)
for (int c = col - 1; c <= col + 1; c++)
if (inbounds(world, r, c) && world[r][c])
num++;
return num;
}
private static boolean inbounds(boolean[][] world, int r, int c) {
return r >= 0 && r < world.length && c >= 0 &&
c < world[0].length;
}
}
有没有人对什么能帮助我获得所有符号有任何想法?
答案 0 :(得分:2)
您正在为网格使用布尔2-D数组。因此每个条目只能有两个值。例如,如果将其切换为int [] [],则可以为可能包含该单元格的不同类型的对象指定不同的值。比如说:
也许使用0 =未占用&#34;。&#34;,因为整数默认为零。
答案 1 :(得分:2)
用于存储数据的数据结构(boolean[][]
)每个单元格只能容纳两个不同的值,但您需要五个。您可以保留类似的程序结构,但可以通过更改为byte[][]
来容纳所需的不同值的数量。
此外,您可以通过使用数组将这些show()
值映射到适当的显示字符来至少简化byte
方法。
也许这会让你朝着有用的方向前进:
private final static char[] DISPLAY_SYMBOLS = { '.', '@', '#', '*', 'O' };
// ...
public static void show(byte[][] grid) {
for (byte[] row : grid) {
StringBuilder sb = new StringBuilder();
for (byte col : row) {
sb.append(DISPLAY_SYMBOLS[col]).append(' ');
}
System.out.println(sb.toString());
}
}