22

私は Java プログラミングの初心者で、奇妙な問題に遭遇しました。以下は私のコードで、ユーザーに入力を求め、ユーザーが一度に1単語ずつ入力した内容を出力します。

問題は、プログラムが終了しないことです。私の限られた理解では、while ループ内でスタックしているように見えます。誰か私を少し助けてくれませんか?前もって感謝します。

import java.util.Scanner;

public class Test{
   public static void main(String args[]){
      System.out.print("Enter your sentence: ");
      Scanner sc = new Scanner (System.in);

      while (sc.hasNext() == true ) {
        String s1 = sc.next();
        System.out.println(s1);
      }

      System.out.println("The loop has been ended"); // This somehow never get printed.
   }
}
4

9 に答える 9

11

Scanner、「ファイルの終わり」状態が見つかるまで読み取りを続けます。

から読んでstdinいるように、それはEOF文字を送信したとき(通常はUnixの場合)か、スタイルリダイレクト^dを使用している場合はファイルの最後になります。<

于 2012-05-07T23:11:05.860 に答える
5

Alnitak が述べたように、スキャナーを使用する場合、基本的に EOF 文字がある場合に hasNext() に対して「false」を取得するだけです...キーボードを使用して EOF 文字を簡単に送信することはできないため、このような状況では一般的です実行を停止するために送信できる特殊文字または単語を含めるには、次のようにします。

String s1 = sc.next();
if (s1.equals("exit")) {
    break;
}

休憩はあなたをループから抜け出させます。

于 2012-05-07T23:16:50.307 に答える
2

コードにフェイルセーフをプログラムしていないため、機能しません。java は、収集する入力がある間はスキャナーが入力を収集できることを認識し、可能であれば、それが真である間は収集を続けます。たとえば、EXIT のような特定の単語を確認するスキャナー テストを実行しても問題ありませんが、特定の回数 (10 回程度) ループさせることもできます。しかし、最も効率的な方法は、プログラムのユーザーに入力したい文字列の数を尋ねることです。ユーザーが入力した文字列の数が入力した数よりも少ない場合、プログラムは実行されます。追加のオプションは、入力したよりも少ないスペースが必要であり、次のセルを空白だけで埋めたくない場合に、EXIT と入力する場合です。さらに入力するかどうかをプログラムに尋ねさせることができます。コンピューターにさらにデータを入力する必要があることに気付いた場合に備えて。プログラムを作成する方法はたくさんあるので、非常に単純化されています。これらの方法についてお気軽にお尋ねください。XD

于 2013-02-17T04:27:28.540 に答える
1

これに EOF 文字を使用したくない場合は、 StringTokenizer を使用できます。

import java.util.*;
public class Test{
   public static void main(){
      Scanner sc = new Scanner (System.in);
      System.out.print("Enter your sentence: ");
      String s=sc.nextLine();
      StringTokenizer st=new StringTokenizer(s," ");//" " is the delimiter here.
      while (st.hasMoreTokens() ) {
        String s1 = st.nextToken();
        System.out.println(s1);
      }

      System.out.println("The loop has been ended");
   }
}
于 2014-10-17T17:52:16.780 に答える
0

システム依存のファイル終了インジケーター (Unix/Linux/Ubuntu の場合は d、Windows の場合は z) のいずれかを使用して、while ステートメントを false にすることができます。これにより、うまくループから抜け出すことができます。:)

于 2014-09-30T00:41:40.567 に答える
-3

while ループを次のように変更します。s1 を文字列 s1 として宣言します。ループの外に 1 回。ループを終了するには、単に ctrl+z を使用します。

  while (sc.hasNext())
  {    
    s1 = sc.next();
    System.out.println(s1);
    System.out.print("Enter your sentence: ");
  }
于 2013-02-19T05:53:27.890 に答える