2017-10-09 14 views
0

私はJavaには新しいので、私のコードでどこが間違っているのか分かりません。プログラムは、カンマで1つの文字列として2つの単語を入力し、カンマなしで2つの別々の単語として出力することになっています。コンマもない場合は、エラーメッセージを出力することになっています。 "q"を入力するとプログラムが終了します。これは、 "q"が入力されたときに完全に機能します。コンマ入力があった場合にJavaはそのような要素の例外がありません

また
Exception in thread "main" java.util.NoSuchElementException: No line found 
at java.util.Scanner.nextLine(Scanner.java:1540) 
at ParseStrings.main(ParseStrings.java:16) 

、プログラムが動作しませんが、私は一部をコメントアウトする場合:また、コンマがない場合、しかし、それは次のエラーメッセージを追加し、出力した後に動作しますコード内のカンマについては、動作しますが、上記のエラーメッセージが表示されます。私の誤りを私に見せるための助けに感謝します。ここでは、コードは次のとおりです。

import java.util.Scanner; 

public class ParseStrings { 
public static void main(String[] args) { 
     Scanner scnr = new Scanner(System.in); 
     String userInput = ""; 
     String firstWord = ""; 
     String secondWord = ""; 
     boolean inputDone = false; 
     boolean noComma = false; 

     System.out.println("Enter input string or q to quit: "); 

     while (!inputDone) { 

     userInput = scnr.nextLine(); 

     if (userInput.equals("q")) { 
      System.out.println(" Exiting."); 

      inputDone = true; 
     } 
     else { 
      while (!noComma) { 
       if (userInput.indexOf(',') < 0) { 
        System.out.println("Error: No comma in string"); 

        noComma = true; 
       } 
       else { 
        firstWord = userInput.substring(0, userInput.indexOf(',')); 
        firstWord = firstWord.trim(); 

        secondWord = userInput.substring(userInput.indexOf(',') + 1, userInput.length()); 
        secondWord = secondWord.trim(); 

        System.out.println("First word: " + firstWord); 
        System.out.println("Second word: " + secondWord); 
        System.out.println(); 
       } 
      } 
     } 

     } 

     return; 
    } 
} 
+0

エラーが発生したときにデバッガを使用してプログラム状態を評価しようとしましたか? – dave

+0

このコードを実行すると、記述したエラーメッセージが表示されません。無限ループになります。 –

+0

デイブ、コードを一歩進んだことはありませんでした。それはおそらく私の最初のトラブルシューティングのステップだったはずです。私は今からやります。ありがとう! – TedC

答えて

0

あなたは、whileループを必要としません:

  while (!noComma) { 

何のカンマは入力に存在しない場合を除きnoCommaが設定されませんので、それは無限になります。あなたはそれがこの条件を処理した後、持っているif文は、私が考える方法は、あなたが欲しい:コンマ出力が正しくありませんと私は文字列を入力した場合、コード内で

  if (userInput.indexOf(',') < 0) { 
+0

ありがとう!それは働いた – TedC

0

が、再び場合、私は、コンマまたはカンマなしで入力されたこと無限ループに詰まり、プログラムを終了すると例外を出します。要求されている要素が存在しないことを示すために、さまざまなアクセサメソッドによってスローされます。今私はカンマなしで入力されたとき、それは他の最初に来て、原因条件一致にそれがループしながら、それは今それができるnoCommaフラグを設定したメッセージを印刷するとnoCommaに入力された

while (!inputDone) {userInput = scnr.nextLine(); 

    if (userInput.equals("q")) { 
     System.out.println(" Exiting."); 

     inputDone = true; 
    } 
    else { 
     while (!noComma) { 
      if (userInput.indexOf(',') < 0) { 
       System.out.println("Error: No comma in string"); 

       noComma = true; 
      } 

あなたのコード内のエラーを表示してみましょうそれが今では、今ではちょうどこの条件に入力を取ってちょうどされ、無限whileループと

while (!inputDone) {userInput = scnr.nextLine(); 

    if (userInput.equals("q")) { 
     System.out.println(" Exiting."); 

     inputDone = true; 
    } 

をチェックして、他の条件に行くことは決してありませんので、条件が偽の間、非常に最初として、他には入りません"q"を検索するので、このプログラムをCtrl + cで終了すると、その例外で終了します。

私がどこに間違っていても私を訂正してください。

+0

ありがとう!私はオンラインのJavaクラスを取っていますが、私はこのレッスンをあまり受けていませんでしたが、あなたが説明した方法でそれをクリアしました。再度、感謝します! – TedC

関連する問題