2

ファイルを読み取るプログラムを書きました。ファイルを正しく読み取ります。printステートメントを使用してテストしました。しかし、ファイルの最後の行を読み取った後、プログラムは停止しません。無限ループに陥ります。私のwhileループは空白文字を次の行として読み続けていると思います。修正方法がわかりません。

breakその部分に a を入れるelseと、最初の行を読み取るだけでwhileループから抜け出します。理由はわかりません。

私を助けてください。

コードは次のとおりです。

public static void InterpretMessageFromFile() throws FileNotFoundException{
    File inputfile = new File("FilePath");
    Scanner reader = new Scanner(inputfile);

try
    {
        while (reader.hasNextLine())
        {
            //if the type of order is add order to existing Order Book
            if (reader.hasNext("A")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts);
                //int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id);
                //int id = Integer.parseInt(retrieve_id ,2); // for binary file
                String or_side = reader.next();
                String retrieve_share = reader.next();
                int share = Integer.parseInt(retrieve_share);
            //  int share = Integer.parseInt(retrieve_share, 2); //for binary file
                String retrieve_price = reader.next();
                int price = Integer.parseInt(retrieve_price);
                //int price = Integer.parseInt(retrieve_price, 2); //for binary file
                System.out.println("Add Order : Id is " + id );
                AddOrderToExistingBook.AddNewOrder(id, ts, or_side, share, price);
            }

            //if it is cancel order
            else if (reader.hasNext("X")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts);
                //int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id);
                System.out.println("Cancel Order : Id is " + id + " time stamp is : " + ts );
                //int id = Integer.parseInt(retrieve_id, 2); //for binary file
                //String retrieve_share = reader.next();
            //  int share = Integer.parseInt(retrieve_share, 2); // need to add back later, removing it for testing purposes
                CancelOrder.CancelPartOfOrder(id, ts);
            }

            //if it is delete order
            else if (reader.hasNext("D")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts, 2);
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id, 2);

                DeleteOrder.DeleteOrderFromBook(id, ts);


            }
            else{
                 // unexpected token.  
                // basically log as info and ignore.
            }
        } 
    }
    finally
    {
        reader.close();
    }
}
4

2 に答える 2

1

ファイルの読み取り操作を処理するときは、常にいくつかの条件を確認することをお勧めします-1) ファイルに次の行がありますか? 2) 次の行はヌルではありません。

while (reader.hasNextLine() && (line = reader.nextLine()) != null) 

そして、これString lineをコードで使用できます。

あなたのコードでは、 で次の値を取得していますがreader.next()、ポインタを進めません。これが、ループが終了しない理由です。

参考:スキャナー

于 2013-10-31T18:26:32.380 に答える