0

自動販売機のようなプログラムを作りました!

私のコードは次のようになります:

public static void main (String [] args) {
    Scanner sc = new Scanner (System.in);
    while(sc.hasNext()) {
        String string = sc.next();

        sum = generateSum(sum)
        .....
    }
}

public static int generateSum(int sum) {
    Scanner sc = new Scanner (System.in);
    while (sc.hasNext()) {
        ....
    }

    return sum;
}

コードを簡略化して申し訳ありませんが、通常のコードは非常に長いです! ただし、問題はwhile (sc.hasNext())ループを 2 回使用することです。基本的にはユーザーからの入力が TERMINATE になるまでメインメソッドを継続したいのですが、一度実行するとプログラムが終了してしまいます。

メソッドを取り出すgenerateSumと、メインメソッドのループが正常に機能することがわかったので、ループが2回あることに関係していると思いwhile (sc.hasNext())ます。

問題を解決する方法はありますか?

4

3 に答える 3

1

このhasNext()メソッドは、ファイル マーカーの最後に到達するまでブロックされます。System.inこれは、十分なバッファーを読み取るか、ファイルの最後に到達するまで、さらに入力があるかどうかがわからないためです (Windows では Control-Z と Control キーで通知できます)。 -D (UNIX では)。その時点System.inで EOF マークにあり、コードから再度開く方法はありません。

複数のデータ ストリームを処理する必要がある場合System.inは、ある種のセンチネル値 (END という単語など) を使用して、1 つの入力ストリームの終わりと別の入力ストリームの始まりをマークする必要があります。

于 2013-10-07T15:48:37.180 に答える
0

sc.next() でスキャンされている入力を消費すると、状態が変化し、それに応じて hasNext() が返されると確信しています。問題がある可能性があります。

于 2013-10-07T15:24:23.380 に答える