以下代码是康威在终端中的生活游戏。我想在这里做的是将当前步骤覆盖到下一步。我有一个临时的2D数组在动画()方法。同样在主方法中,我打印了三次动画变化(),这就是我想要改变的。基本上,我想覆盖董事会,而不是打印三次,因为视觉上它相当丑陋,而循环。
public class GameOfLifeTerminal {
private int WIDTH;
private int HEIGHT;
private int[][] board;
private int aliveNeighbours = 0;
public GameOfLifeTerminal(int width, int height) {
this.WIDTH = width;
this.HEIGHT = height;
this.board = new int[width][height];
}
/*Getters & Setters*/
public void setAlive(int x, int y) {
this.board[x][y] = 1;
} //true
public void setDead(int x, int y) {
this.board[x][y] = 0;
} // false, currently not being used
//get the rows in the y axis
public int getRows(){ return board.length; }
//get the columns in the x axis
public int getColumns(){ return board[0].length; }
/*Methods and functions*/
public void printBoard() { //prints the board
for (int y = 0; y < HEIGHT; y++) {
String line = "";
for (int x = 0; x < WIDTH; x++) {
if (this.board[x][y] == 0) {
line += "·";
} else {
line += "O";
}
}
System.out.println(line);
}
System.out.println();
}
public int countAliveNeighbours(int x, int y) { //count the number of alive neighbours
int count = 0;
/*
for(int i = x-1; i < x+1; i++) {
for (int j = y - 1; i < y + 1; j++) {
if (getState(i, j) == 1) count++;
}
}
if(getState(x, y) == 1) count--;
*/
//checks each position one by one and calls the getState() method to be inside the bounds
count += getState(x - 1, y - 1);
count += getState(x, y - 1);
count += getState(x + 1, y - 1);
count += getState(x - 1, y);
count += getState(x + 1, y);
count += getState(x - 1, y + 1);
count += getState(x, y + 1);
count += getState(x + 1, y + 1);
//System.out.println(count);
return count;
}
public int getState(int x, int y) { //get state neighbours in case is out of bounds
if (x < 0 || x >= WIDTH) return 0;
if (y < 0 || y >= HEIGHT) return 0;
return this.board[x][y];
}
public void animateChanges() { //applies the rules and then prints the board with current state of the cells
//temporary board
int[][] newBoard = new int[WIDTH][HEIGHT];
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
aliveNeighbours = countAliveNeighbours(x, y);
//rules
if (getState(x, y) == 1) { //if true
if (aliveNeighbours < 2) { // le ded
newBoard[x][y] = 0;
} else if (aliveNeighbours == 2 || aliveNeighbours == 3) { //alive
newBoard[x][y] = 1;
} else if (aliveNeighbours > 3) { // le ded
newBoard[x][y] = 0;
}
} else {
if (aliveNeighbours == 3) { //create new cells
newBoard[x][y] = 1;
}
}
}
}
this.board = newBoard;
//System.out.println("Alive cells " + aliveNeighbours);
printBoard();
}
//main method
public static void main(String[] args) {
GameOfLifeTerminal simulation = new GameOfLifeTerminal(8, 5);
simulation.setAlive(2, 2);
simulation.setAlive(3, 2);
simulation.setAlive(4, 2);
simulation.animateChanges();
simulation.animateChanges();
simulation.animateChanges();
}
}
您似乎已经在使用此调用“覆盖”animateChanges()方法中的板:
this。板=新板
为什么不简单地删除对
printBoard()的调用
来自相同的
animateChanges()
方法?然后,您可以调用printBoard()
何时以及如何执行此操作。
问题内容: 假设我在课堂上说两种方法 和 那是什么感觉 重载还是重载? 问题答案: 重载是指两个或多个具有相同名称但参数不同的方法,就像您的示例一样。重载是从接口或抽象类实现一个方法的,因此超类中的方法具有实现,而子类中的方法具有不同的实现,它们仍然具有相同的方法名称和参数。
问题内容: 嗨,我只是想确保我正确理解这些概念。Java中的重载意味着您可以拥有具有不同数量的参数或不同数据类型的构造函数或方法。即 这个方法怎么样?由于它返回不同的数据类型,是否仍会被视为重载? 第二个问题是:java中有什么重载?它与继承有关吗?让我们有以下内容: 所以现在让我说以下 如果我打电话 这将返回车辆类的价格20,000 如果我打电话 这将返回卡车级别的价格14,000 我的知识
我正在尝试使用fscanf加载一些结构数组的默认值,这看起来像 数据按如下方式存储在文本文件中(使用不同的值重复多次): 我用fscanf/fscanf_s(尝试两者)读取的值如下: 然而,VS2012在最后抛出了一个异常,称列表已损坏。调试显示,在阅读了上述示例文本的前四行后,结构的“map”部分包含以下内容 其中X是未初始化的值。 似乎fscanf正在试图“null terminate”我的整
我有一个Maven插件,它在POM文件中配置为 现在我想从命令行覆盖那个,所以我运行 我可以看到的值仍然是,而不是。可以从命令行覆盖配置参数吗?
我仍在学习封装。我有一个,其中每个emcapsulated都有一个数组,以及它们的所有设置程序 现在在我的程序中,我注意到数组listRule(其中添加了与语法相关的规则)在每次添加新语法时都会被覆盖。我已经能够识别出错误发生在会清空listRule中所有其他语法的内容,因此listRule似乎对所有语法都是一样的。我的数组listRule创建不正确还是我的循环?
所以,我有两个多维数组。 数组值示例: 这就是我想要的 我想从组合中获得所有唯一的数组,并用它填充唯一的组合。 我尝试了这个函数,但它只填充了5个数组,真奇怪!