gpt4 book ai didi

java - 无法弄清楚如何在 Java 中读取输入文件中的多个输入

转载 作者:行者123 更新时间:2023-11-30 10:49:02 25 4
gpt4 key购买 nike

我的任务是在 Java 上制作生命游戏的一个版本,但没有 GUI 和所有花哨的东西,只有一些简单的编码。基本上,我们必须以一种读取输入文件并将结果输出到另一个文件的方式来设计它。输入文件的格式如下: 第一行是网格的尺寸。下一行是所需的世代数。然后网格包含 1s 的生物和 0s 的空间。文件以 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();
}

PS:请记住,我是 Java 的初学者,对它的了解还不是很多,因此非常感谢您提供任何帮助/提示。谢谢!

最佳答案

这个问题的关键部分是

The file terminates by 0 0.

你还没有写任何东西来处理这种情况。

如果我处在你的位置,我会阅读文件的下一行,首先获取网格的尺寸,看看它是否是终止条件;即“0 0”。

如果没有,我会将读取器对象(在您的情况下为 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;
}
}

在这种情况下,扫描仪是在 GameOfLife 类的 readInput 方法之外创建的(也许在主函数中?)。

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

关于java - 无法弄清楚如何在 Java 中读取输入文件中的多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com