在Java中难以理解如何读取输入文件中的多个输入
我的任务是在Java上制作一个版本的生活游戏,但是没有GUI和所有的花哨的东西,只是一些简单的编码。基本上,我们必须以这样一种方式设计它:它读取一个输入文件并将结果输出到另一个文件。输入文件的格式如下:第一行是网格的尺寸。下一行是所需的代数。然后是一个网格,其中生物为1,空间为0。文件以0结尾在Java中难以理解如何读取输入文件中的多个输入,java,Java,我的任务是在Java上制作一个版本的生活游戏,但是没有GUI和所有的花哨的东西,只是一些简单的编码。基本上,我们必须以这样一种方式设计它:它读取一个输入文件并将结果输出到另一个文件。输入文件的格式如下:第一行是网格的尺寸。下一行是所需的代数。然后是一个网格,其中生物为1,空间为0。文件以0结尾 5 5 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
5 5
1
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
5 5
2
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0
这个的输出应该是:
Creature #1
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
Creature #2
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
我已经完成了大部分代码,但我有一个问题需要一些帮助/指导。我不知道如何让它独自移动到下一个生物。就像它将解决游戏的第一个网格,但我不知道如何使它移动到下一个网格,并最终终止。这是我的代码,请告诉我无论如何我可以改进它和/或解决我的问题
这是我的密码:
public class GameOfLife {
int height;
int width;
int gen;
int[][] grid;
ArrayList<Integer> gridrow = new ArrayList();
ArrayList<Integer> gridcol = new ArrayList();
public void readInput(String input) throws FileNotFoundException {
Scanner in = new Scanner(new File(input));
height = in.nextInt();
width = in.nextInt();
grid = new int[height][width];
gen = in.nextInt();
for (int row = 0; row < height; row++) {
for (int column = 0; column < width; column++) {
grid[row][column] = in.nextInt();
}
}
in.nextLine();
}
public void nextGen() {
int genNow = 0;
while (genNow < gen) {
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
neighbours(row, col);
}
}
genNow++;
}
}
public void neighbours(int curRow, int curCol) {
int count = 0;
int strrow;
int endrow;
int strcol;
int endcol;
if (curRow - 1 < 0) {
strrow = curRow;
} else {
strrow = curRow - 1;
}
if (curRow + 1 == height) {
endrow = curRow;
} else {
endrow = curRow + 1;
}
if (curCol - 1 < 0) {
strcol = curCol;
} else {
strcol = curCol - 1;
}
if (curCol + 1 == width) {
endcol = curCol;
} else {
endcol = curCol + 1;
}
for (int row = strrow; row < endrow + 1; row++) {
for (int col = strcol; col < endcol + 1; col++) {
if (grid[row][col] == 1) {
count++;
}
}
if (count == 3) {
gridrow.add(curRow);
gridcol.add(curCol);
}
}
}
}
public void printOutput(String output) throws FileNotFoundException {
PrintWriter out = new PrintWriter(new File(output));
for (int row = 0; row < grid.length; row++) {
for (int col = 0; col < grid.length; col++) {
out.print(grid[row][col] + " ");
}
out.print("\n");
}
out.flush();
out.close();
}
公共类游戏人生{
内部高度;
整数宽度;
int-gen;
int[][]网格;
ArrayList gridrow=新的ArrayList();
ArrayList gridcol=新的ArrayList();
公共void readInput(字符串输入)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(输入));
高度=in.nextInt();
宽度=in.nextInt();
网格=新整数[高度][宽度];
gen=in.nextInt();
对于(int row=0;row
PS:请记住,我是一名Java初学者,但对Java还不是很了解,因此非常感谢您的帮助/提示。谢谢大家! 这个问题的关键部分是 文件以0结尾 你没有写任何东西来处理这种情况 如果我站在你的立场上,我会阅读文件的下一行,首先得到网格的尺寸,看看它是否是终止条件;i、 e.“0” 如果没有,我会将reader对象(在您的例子中是Scanner)提供给下一个GameOfLife对象的readInput方法 readInput方法的签名类似于stg
public void readInput(Scanner scanner, int width, int height);
它甚至可能是一个返回GameOfLife类实例的静态方法
public class GameOfLife {
int height;
int width;
int gen;
int[][] grid;
ArrayList<Integer> gridrow = new ArrayList();
ArrayList<Integer> gridcol = new ArrayList();
public static GameOfLife readInput(Scanner scanner, int width, int height) {
GameOfLife result = new GameOfLife();
result.width = width;
result.height = height;
result.gen = scanner.readInt();
for (int row = 0; row < height; row++) {
for (int column = 0; column < width; column++) {
result.grid[row][column] = scanner.nextInt();
}
}
scanner.nextLine();
return result;
}
}
公共类游戏人生{
内部高度;
整数宽度;
int-gen;
int[][]网格;
ArrayList gridrow=新的ArrayList();
ArrayList gridcol=新的ArrayList();
公共静态GameOfLife readInput(扫描仪、整数宽度、整数高度){
GameOfLife结果=新GameOfLife();
结果:宽度=宽度;
结果:高度=高度;
result.gen=scanner.readInt();
对于(int row=0;row
在这个场景中,扫描器是在GameOfLife类的readInput方法之外创建的(可能在主函数中?)
List List=new ArrayList();
扫描仪输入=新扫描仪(新文件(输入));
while(true){
int width=in.readInt();
int height=in.readInt();
如果(宽度!=0和高度!=0){
GameOfLife game=GameOfLife.readInput(英寸、宽度、高度);
列表。添加(游戏);
}
其他的
打破
}
//然后用GameOfLife对象列表做任何你喜欢的事情
Repat,直到EOF{Read W;Read H;Read N;Read H行W字符;转换为网格;将游戏迭代N次}作为一个草图流。@MargaretBloom您能详细介绍一下吗?如何将游戏作为一个草图流迭代N次?在同一个输入文件中是否有多个网格?在你读了一张表格后,你该怎么处理它?注意,你可以假设我熟悉生活游戏的规则。我是问,对于给定的网格,是否应该运行一定数量的代?或者输入的下一个网格是否与它之前的网格有某种关联?另外,通过调用nextGen
List<GameOfLife> list = new ArrayList<GameOfLife>();
Scanner in = new Scanner(new File(input));
while(true) {
int width = in.readInt();
int height = in.readInt();
if(width != 0 && height != 0) {
GameOfLife game = GameOfLife.readInput(in, width, height);
list.add(game);
}
else
break;
}
//then do anything you like with the list of GameOfLife objects