忽略文件中的数字

时间:2012-09-25 21:33:11

标签: java arrays file io 2d

我正在制作一个程序,从文件中获取数据并从中制作迷宫游戏。 maze.txt文件示例如下:

5  5
P.XX.
...X.
.XT..
..X..
X....

顶部的两个数字定义数组的行和列。 这是我正在使用的代码

import java.util.*;
import java.io.*;

public class MazeGame {

    public static void main(String[] args) throws Exception {

        // Display the maze

        Scanner sc = new Scanner(new File("maze.txt"));
        int rows1 = sc.nextInt();
        int columns1 = sc.nextInt();
        rows1 += 1;
        columns1 += 1;

        BufferedReader in = new BufferedReader(new FileReader("maze.txt"));

        char[][] treasureMaze = new char[rows1][columns1];
        for (int i = 0; i < rows1 || i < columns1; ++i) {
            String line = in.readLine();
            if (line == null) {
                System.out.println("Error in array");
                return;
            }
            sc.nextLine();

            treasureMaze[i] = line.toCharArray();
        }

        display(treasureMaze);
        int vertical = 0;
        int horizontal = 0;

        // Give Move Options
        options();

        // Setup a while loop that continues until
        // the user has gotten to the treasure, or 'P'
        while (treasureMaze[vertical][horizontal] != 'T') {
            // Get Users Decision
            Scanner moveChoice = new Scanner(System.in);
            int choice = moveChoice.nextInt();

            if (choice == 1) {
                System.out.println("You chose to Move up");
            } else if (choice == 2) {
                System.out.println("You chose to Move down");
            } else if (choice == 3) {
                System.out.println("You chose to Move left");
            } else if (choice == 4) {
                System.out.println("you chose to Move right");
            } else {
                return;
            }

            // Move the Player: Each choice will move the player
            // according to their choice and then re-display the
            // map and options so that they can move through the maze

            // Move Up
            if (choice == 1) {
                if (vertical - 1 < 0) {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical - 1][horizontal] == '.') {
                    treasureMaze[vertical - 1][horizontal] = 'P';
                    treasureMaze[vertical][horizontal] = '.';
                    vertical -= 1;
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical - 1][horizontal] == 'T') {
                    System.out.println("\nCongratulations you won!");
                    treasureMaze[vertical][horizontal] = 'T';
                } else {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                }
            }

            // Move Down
            else if (choice == 2) {
                if (vertical + 1 < 0) {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical + 1][horizontal] == '.') {
                    treasureMaze[vertical + 1][horizontal] = 'P';
                    treasureMaze[vertical][horizontal] = '.';
                    vertical += 1;
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical + 1][horizontal] == 'T') {
                    System.out.println("\nCongratulations you won!");
                    treasureMaze[vertical][horizontal] = 'T';
                } else {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                }
            }

            // Move Left
            else if (choice == 3) {
                if (horizontal - 1 < 0) {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical][horizontal - 1] == '.') {
                    treasureMaze[vertical][horizontal - 1] = 'P';
                    treasureMaze[vertical][horizontal] = '.';
                    horizontal -= 1;
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical][horizontal - 1] == 'T') {
                    System.out.println("\nCongratulations you won!");
                    treasureMaze[vertical][horizontal] = 'T';
                } else {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                }
            }

            // Move Right
            else if (choice == 4) {
                if (horizontal + 1 < 0) {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical][horizontal + 1] == '.') {
                    treasureMaze[vertical][horizontal + 1] = 'P';
                    treasureMaze[vertical][horizontal] = '.';
                    horizontal += 1;
                    display(treasureMaze);
                    options();
                } else if (treasureMaze[vertical][horizontal + 1] == 'T') {
                    System.out.println("\nCongratulations you won!");
                    treasureMaze[vertical][horizontal] = 'T';
                } else {
                    System.out
                            .println("\nCannot move there! Try something else\n");
                    display(treasureMaze);
                    options();
                }
            } else {
                System.out.println("Bye!");
                return;
            }

        }
    }

    // Display Object: prints out the maze for the user
    public static void display(char x[][]) {
        for (int row = 0; row < x.length; row++) {
            for (int column = 0; column < x[row].length; column++) {
                System.out.print(x[row][column] + "\t");
            }
            System.out.println();
        }
    }

    // Options Object: gives the options menu to the user
    static void options() {
        System.out.println("You may:");
        System.out.println("\t1) Move up");
        System.out.println("\t2) Move down");
        System.out.println("\t3) Move left");
        System.out.println("\t4) Move right");
        System.out.println("\t0) Quit");

    }
}

当我尝试运行该程序时,我需要查看第一次运行的5 5然后将其删除,以便我可以使用我的程序的其余部分而不会遇到顶部的数字。有没有办法忽略这些数字?

3 个答案:

答案 0 :(得分:1)

为什么要打开文件阅读两次?

  

扫描仪sc =新扫描仪(新文件(“maze.txt”));
  BufferedReader in = new BufferedReader(new FileReader(“maze.txt”));

使用ScannerBufferedReader,而不是两者。

另一个选择是简单地在开始时调用BufferedReader.readLine一个额外的时间来忽略第一行。

使用最少的代码更改,您实际上可以传递一个字符串来构建一个扫描程序:

    //move BufferedReader creation up
    BufferedReader in = new BufferedReader(new FileReader("maze.txt"));
    Scanner sc = new Scanner(in.readLine()); //Scan first line from the Reader

    // The res tof your code as it exists now
    int rows1 = sc.nextInt();
    int columns1 = sc.nextInt();
    rows1 += 1;
    columns1 += 1;

答案 1 :(得分:1)

您可以使用Scanner.nextLine而不是使用BufferedReader再次打开文件。

编辑:

澄清一下,我的意思是:

    Scanner sc = new Scanner(new File("maze.txt"));
    int rows1 = sc.nextInt();
    int columns1 = sc.nextInt();

    char[][] treasureMaze = new char[rows1][columns1];

    for (int i = 0; i < rows1; ++i) {
        String line = sc.nextLine();

EDIT2:

我删除了

    rows1 += 1;
    columns1 += 1;

并更改了for循环:

我不确定在行和列中添加1的目的是什么,并且循环应该只循环遍历行数rows1。至少对于文件部分的阅读。

答案 2 :(得分:0)

我试图创建一个类似的场景,但我的代码与你的完全不同。如果你想忽略第1行的数字,你可以在进入下一行之前进行检查。 检查此代码:

Scanner scan = new Scanner(System.in);
    System.out.println("Enter rows and columns");
    PrintWriter write = new PrintWriter("maze.txt");
    write.println(scan.next());
    write.print("a bc db gj");
    write.flush();
    write.close();

    BufferedReader reader = new BufferedReader(new FileReader("maze.txt"));
    String rt="";
    while((rt=reader.readLine())!=null) {
        if(rt.startsWith("5")) {
         continue;  
        }
        else {
        System.out.println(rt);
        }
    }

}

输入:

5 5

输出:bc db gj

希望这有助于:)