2

我有一个文本文件,提供 22 个高尔夫球场的信息,包括球场名称、名称、位置、设计师、果岭费、标准杆、建造年份和总码数。正如我所读到的,每一行都需要存储到适当的变量中,然后用于创建一些对象。文件的第一行是文本文件中高尔夫球场的数量。

    FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")
            + "\\GolfCourses.txt");
    //use file
    DataInputStream in = new DataInputStream(fstream);
    //read input
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    Tree newTree = new Tree();


    try{
         String line = br.readLine();
          if(line==null)
             throw new IOException();

        int clubs = Integer.parseInt(line);
        for(int i = 0; i < clubs; i++){
            String name = br.readLine();
            String location = br.readLine();
            double fee = Double.parseDouble(br.readLine());
            int par = Integer.parseInt(br.readLine());
            String designer = br.readLine();
            int built = Integer.parseInt(br.readLine());
            int yards = Integer.parseInt(br.readLine());
            newTree.insert(new TreeNode(new GolfCourse(name, location, designer, fee, par, built, yards))); 
        }

        in.close();
    }catch(IOException e){
        System.out.println(e);
    }

读入似乎超前,所以程序试图解析字符串而不是数字。我以前从来没有遇到过这个问题,所以我不知道如何解决它。

编辑:代码现在按预期工作。问题来自 for 循环的“i <= clubs”部分。感谢您抽出宝贵时间提供帮助!

4

2 回答 2

1

这是因为您的 firstbr.readLine()会从文件中获取您的第一行,即俱乐部数量。在if失败的语句之后,您正在调用br.readLine(). 此调用将获取下一行,因为第一行已在br.realLine()语句的最后一次调用中检索到if

试试这个:

String line = br.readLine();
if(line == null) {
    throw new IOException();
}
int clubs = Integer.parseInt(line);
于 2012-11-03T17:17:51.530 回答
1

像这样读取文件:

File f = new File("Path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

检索字段:

如果高尔夫球场、名称、位置等字段位于一行,每个条目用“单个空格”分隔:

-使用split(" ");

如果高尔夫球场、名称、位置等字段每行一个:

-使用split("\n"); Not "\\" but "\"

-使用for-loopwith count of 8,得到 8 个字段。

对象的创建:

-创建一个Java bean包含 8 个字段的字段,以保存这些值。

于 2012-11-03T17:22:53.373 回答