1 生成二维数组
private void fillRandom(long seed) {
final Random random = new Random(seed);
IntStream.range(0, size)
.forEach(row -> IntStream.range(0, size)
.forEach(col -> map[row][col] = random.nextBoolean())
);
}
2 Stage 2 另一种方法
import java.util.BitSet;
import java.util.Random;
import java.util.Scanner;
import java.util.function.BiPredicate;
public class Main {
int size;
BitSet[] rows;
Main(int n, int seed, int generations) {
size = n;
var rand = new Random(seed);
evolve((_i, _j) -> rand.nextBoolean());
while (generations-- > 0) {
evolve(this::toBeAlive);
}
}
public static void main(String[] args) {
var sc = new Scanner(System.in);
new Main(sc.nextInt(), sc.nextInt(), sc.nextInt())
.display();
}
private void evolve(BiPredicate<Integer, Integer> p) {
var next = new BitSet[size];
for (int i = 0; i < size; i++) {
next[i] = new BitSet(size);
for (int j = 0; j < size; j++) {
if (p.test(i, j)) {
next[i].set(j);
}
}
}
rows = next;
}
private boolean toBeAlive(int i, int j) {
boolean isAlive = rows[i].get(j);
int neighbors = isAlive ? -1 : 0;
for (int di = -1; di < 2; di++) {
for (int dj = -1; dj < 2; dj++) {
int ii = (i + di + size) % size;
int jj = (j + dj + size) % size;
if (rows[ii].get(jj)) {
++neighbors;
}
}
}
return neighbors == 3 || (isAlive && neighbors == 2);
}
private void display() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(rows[i].get(j) ? ‘O‘ : ‘ ‘);
}
System.out.println();
}
}
}
原文:https://www.cnblogs.com/longlong6296/p/13963331.html