2017-01-13 10 views
0

Scannerからの入力がブロックされることなく利用できるかどうかを確認するにはどうすればよいですか?ループ中にスキャナに何かが含まれていないか確認してください

たとえば、以下の方法を検討してください。各ループ反復では、ユーザー入力がある場合はそれを受け入れるが、何も入力されていない場合は入力なしで処理する必要があります。代わりに、reader.nextLine()は、続行する前にユーザーが行を入力するのを待ちます。

public void creatureCombate() { 

    while (true) { 
     Scanner reader = new Scanner(System.in); 
     String userInput = reader.nextLine(); 

     wait(1); 
     System.out.println("Wolf attacks"); 

     if(userInput.equals("hit")){ 
      System.out.println("hit wolf"); 
     } else{ 
      System.out.println("Tries again"); 
     } 
    } 
} 
+0

そして、あなたの質問は... –

+3

うーん、それは新しいScanerオブジェクトを作成するnessesaryですループが実行されるたびに?そして、@ JoeCが指摘したように、あなたのケースでなぜそれが問題なのですか?私は上記のコードに問題は見られませんか? –

+0

親切に問題の詳細を提供してください – Uzair

答えて

0

すべてnextXxx()hasNextXxx()メソッドがブロックされているので、をいいえ、あなたは「何も入力されていない場合は入力せずに進まない」することができます。

入力を待っている間にコードを実行(狼の攻撃など)するには、複数のスレッドが必要です。

0

は、あなたが複数のスレッドを使用してinput 1は、例えば、終了またはタイムアウトするまでmain thread待機を行う必要があります。

public static void main(String[] args) throws Exception { 
    final List<String> input = new ArrayList<>(); 
    Scanner scanner = new Scanner(System.in); 
    int count = 0; 
    while (count < 10) { 
     Runnable inputThread =() -> { 
      scanner.reset(); 
      System.out.println("Enter input"); 
      try{ 
       String line = scanner.nextLine(); 
       input.add(line); 
      }catch(Exception e){} 
     }; 

     Thread t = new Thread(inputThread); 
     t.start(); 

     Thread.currentThread().join(10000); 
     t.interrupt(); 

     if(input.isEmpty()){ 
      System.out.println("Nothing enteresd"); 
     } else{ 
      System.out.println("Entered :" + input.get(0)); 
      input.clear(); 
     } 
     count++; 
    } 
    scanner.close(); 
} 
関連する問題