在Java中难以理解如何读取输入文件中的多个输入

在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

我的任务是在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
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