2

22 のゴルフ コースの情報を提供するテキスト ファイルがあります。これには、コースの名前、名前、場所、設計者、グリーン料金、パー、建設年、合計ヤードが含まれます。私が読んだように、各行を適切な変数に格納してから、いくつかのオブジェクトを作成するために使用する必要があります。ファイルの 1 行目は、テキスト ファイル内のゴルフ コースの数です。

    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

これbr.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(" ");

ゴルフコース、名前、場所などのフィールドが各行に 1 つずつある場合:

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

-と一緒に使用for-loopしてcount of 8、8 つのフィールドを取得します。

オブジェクトの作成:

-Java beanこれらの値を保持するために、8 つのフィールドを持つ を作成します。

于 2012-11-03T17:22:53.373 に答える