0

你会怎么写这段代码?

这个特殊的问题是关于一个迷宫游戏,它有一个包含探险者(你)、怪物(触摸会杀死你)和宝藏的居住者的数组列表。游戏使用这些居住者所在的方形物体块。我想做的特别的事情是文件读取,它可以导出迷宫的当前配置或将它们作为 txt 文件导入。

规格:首先读取迷宫的行和列以创建适当大小的 Square[][]。然后构建并读取所有的 Squares/Occupants。

对于 Squares,Maze 将首先确定该行以“Square”开头。然后它将读取 Square 的 row 和 col 并使用该信息来构造 Square 对象。最后,它将扫描仪的其余部分传递给 Square 的 toObject 方法,以便它可以初始化自己。

对于所有其他 Occupant,Maze 将确定它是哪种 Occupant,并使用仅采用 Maze 的构造函数构造适当的对象。它不会从 Scanner 读取行或 col,而只是将 Scanner 传递给新创建对象的 toObject 方法。

这是我到目前为止可能是错误的代码:

    public void readMazeFromFile(String fileName) throws IOException, FileNotFoundException, MazeReadException
   {
        Scanner fileSc = new Scanner(new File(fileName));
        String line = fileSc.nextLine(); //whats on the line, will be overwritten
        Scanner lineSc = new Scanner(line);
        String temp;
        lineSc.useDelimiter(",");
        int lineNum = 1; //every time you scan a line out, do lineNum++
        int r1, r2, r3, r4, c1, c2, c3, c4;

        rows = fileSc.nextInt();
        cols = fileSc.nextInt();
        Square hi = new Square(rows, cols);
        line = fileSc.nextLine();
        while ( line != null)
        {
            line = lineSc.nextLine();
            lineSc = new Scanner(line);

            if( lineSc.equals("Square"))
            {
                r1 = lineSc.nextInt();
                c1 = lineSc.nextInt(); 
                hi.toObject(lineSc);
            }
            if (lineSc.equals("Explorer"))
            {

                explorer.toObject(lineSc);
            }
            if (lineSc.equals("Treasure"))
            {
                Treasure.toObject(lineSc);
            }


            lineNum++;
        }

这是示例输出:

5,5
Square,0,0,true,false,false,true,true,true
Square,0,1,true,false,true,false,true,true
Square,0,2,true,false,true,false,false,false
Square,0,3,true,false,false,false,false,false
Square,0,4,true,true,false,false,false,false
Square,1,0,false,false,true,true,true,true
Square,1,1,true,false,true,false,false,false
Square,1,2,true,true,false,false,false,false
Square,1,3,false,true,false,true,false,false
Square,1,4,false,true,false,true,false,false
Square,2,0,true,false,false,true,false,false
Square,2,1,true,false,true,false,false,false
Square,2,2,false,true,false,false,false,false
Square,2,3,false,true,false,true,false,false
Square,2,4,false,true,false,true,false,false
Square,3,0,false,true,false,true,false,false
Square,3,1,true,false,false,true,false,false
Square,3,2,false,true,false,false,false,false
Square,3,3,false,true,true,true,false,false
Square,3,4,false,true,false,true,false,false
Square,4,0,false,true,true,true,false,false
Square,4,1,false,true,true,true,false,false
Square,4,2,false,false,true,true,false,false
Square,4,3,true,false,true,false,false,false
Square,4,4,false,true,true,false,false,false
Explorer,0,0,Scary Name
Treasure,4,4,true
Treasure,2,2,false
Monster,4,4
Monster,3,3

你会为这个部分写什么?

4

2 回答 2

1

这是您可以开始使用的骨架。你真的不需要比Scanner这里更多的东西;它可以完成您需要扫描输入并进行转换等的所有操作。您想使用它的next()nextInt()nextBoolean()方法nextLine()

    Scanner in = new Scanner(new File(filename));
    in.useDelimiter("\\s+|,");

    int rows = in.nextInt();
    int cols = in.nextInt();
    // construct the array

    while (in.hasNext()) {
        String type = in.next();
        int r = in.nextInt();
        int c = in.nextInt();
        // read more depending on type
    }
于 2010-02-23T05:48:40.590 回答
0

在文件上使用 FileReader ,然后将 StreamTokenizer附加 到该文件上,效率更高:)

于 2010-02-23T04:12:56.937 回答