1

情報 :

単純なファイルリーダーであるプログラムを実行すると、例外が発生します。

.javaファイルの横にファイルを保存しています。

出力:

run:
name:Koen
スコア:44
スレッド "main"の例外java.util.NoSuchElementException:行が見つかりません
name:Kevin
スコア:55
at java.util.Scanner.nextLine(Scanner.java:1585)
at tetris.FileIO.loadHighscores (FileIO.java:41)at
tetris.FileIO.getLineScores(FileIO.java:28)
at tetris.FileIO.main(FileIO.java:62)
Java結果:1
BUILD SUCCESSFUL(合計時間:0秒)

コード:

package tetris;

import java.io.File;
import java.io.InputStream;
import java.io.Writer;
import java.util.Scanner;

public class FileIO   {
    private File file;
    private Scanner filescScanner, lineScanner;
    private Writer fileWriter, lineWriter;
    private String[][] data;

    public FileIO () {
        String[][] data = new String[100][1];
    }
    public String[][] getLineScores(){
        return this.loadHighscores(this.getClass().getResourceAsStream("LineHighscores.txt"));
    }
    public String[][] getTimeScores(){
        return this.loadHighscores(this.getClass().getResourceAsStream("TimeHighscores.txt"));
    }

    public String[][] loadHighscores( InputStream resourceStream){

        int x=0;
        String test = "";

        filescScanner = new Scanner(resourceStream);

        while((test=filescScanner.nextLine())!=null) {

            lineScanner = new Scanner(test);
            lineScanner.useDelimiter("-/-");
            System.out.println("name : "+lineScanner.next());
            System.out.println("score : " +lineScanner.next());

            x++;
        }
        lineScanner.close();
        filescScanner.close();
        return data;    
    }

    public static void main(String[] args){
        FileIO file = new FileIO();
        System.out.println(file.getLineScores());
    }
}
4

2 に答える 2

4

nextLine()を呼び出す場合:

 while((test=filescScanner.nextLine())!=null)

スキャナーに入力行がなくなったことを示す例外がスローされます。したがって、nullを返すことはありません。

代わりにhasNextLine()、次の行があるかどうかを確認するために使用してみてください。

while(filescScanner.hasNextLine())
{
    test=filescScanner.nextline();
    ...
}

hasNextLine

public boolean hasNextLine()

戻り値:このスキャナーに別の入力行(ソース)がある場合にのみtrue

したがって、スキャナーに読み取る入力行がなくなると、hasNextLine()が返されfalseます。したがって、サイクルを終了します。

于 2012-12-12T01:23:39.280 に答える
0

私があなたを正しく理解していれば、ファイルに読み込む行がなくなったときに while ループを終了させたいと考えています。Scanner クラスは hasNextLine メソッドを実装しており、読み取る行がある場合は true を返し、それ以外の場合は false を返します。while 条件を scanner.hasNextLine() に置き換えることができると思います。これにより、41 行目で発生している NoElementException に対処できます。この回答がお役に立てば幸いです。

頑張れニコライ

于 2012-12-12T01:37:14.220 に答える