2017-02-27 3 views
1

Javaクラスを使用していますが、hasNextコマンドを使用して2つのユーザー入力変数が数値であることを確認する代入に固執しています。これはこれまで私が持っていたものです。hasNextメソッドで2つの変数をチェックする際にエラーが発生する

スキャナsc =新しいスキャナ(System.in);

String choice = "y"; 
    double firstside; 
    double secondside; 

    //obtain user input 
    while (choice.equalsIgnoreCase("y")) { 


    System.out.println("Enter First Side: "); 
    if (sc.hasNextDouble()) { 
     firstside = sc.nextDouble(); 

    } else { 
     sc.nextLine(); 
     System.out.println("Please enter a numeric value and try again."); 
     continue; 
    } 

    while (true){ 
    System.out.println("Enter Second Side: "); 
    if (sc.hasNextDouble()) { 
     secondside = sc.nextDouble(); 
     break; 
    } else { 
     sc.nextLine(); 
     System.out.println("Please enter a numeric value and try again."); 
    } 
    } 

    //calculate results 
    double hypotenusesquared = Math.pow(firstside, 2) + Math.pow(secondside, 2); 
    double hypotenuse = Math.sqrt(hypotenusesquared); 

    //display results 
    String output = "Hypotenuse = " + hypotenuse; 
    System.out.println(output); 
    System.out.println("Would you like to continue? Y/N?"); 
    choice = sc.next(); 
} 

}}

エラーが発生したときに私は受け付けており、出力は次のようになります。

数値を入力して、もう一度お試しください。最初の面に入力:数値を入力してもう一度お試しください。第一の側を入力します。

私は受信のみするつもり:

数値を入力して、もう一度お試しください。最初の面に入力:

+1

"第1面"と "第2面"の両方を求める大きなループがあるからです。ループの先頭に戻ると、ループの先頭にあるので、「最初の面」をもう一度尋ねます。あなたのプログラムには、「第二の側面」の質問に戻ることができる何もありません。これを修正するには、「第2の側」入力コードをそれ自身のループに入れます。 – ajb

+1

@ajbが言ったことを拡張するために、 'continue'キーワードは2番目の変数をもう一度尋ねるのではなく、ループ全体を繰り返します。したがって、2番目の値に2つ以外の値を入力すると、最初に戻ります。 2番目の入力質問を独自のループに入れたり、do/whileループに入れることができます。 – CynePhoba12

答えて

1

これは、2番目のステートメントのcontinue;がプログラムをwhileループ(次の繰り返し)の最初の行に戻すためです。

これを克服するには、それ自身のwhileループに第2面スキャン文を入れる必要があります。このようなもの:

+0

あなたが提案した変更を追加しましたが、まだ問題が発生しています。コンソールの出力は次のようになります。 – mrgopher

+0

直角三角形の2辺を入力してください。 最初に入力してください: g 数値を入力してもう一度お試しください。 最初の面に入力: 2面目を入力: g 数値を入力してもう一度お試しください。 第2面を入力: 数値を入力してもう一度お試しください。 セカンドサイドに入力:ハイポテナンス= 4.242640687119285 続行しますか? Y/N? y 最初に入力してください: g 数値を入力してもう一度お試しください。 最初に入力してください: 数値を入力してもう一度お試しください。 最初の面に入力: – mrgopher

+0

@mrgopherは有効な出力です。あなたのプログラムは、有効な入力が提供されるまで、 'Enter Second Side 'から再帰的に求めていることがわかります。あなたが望むものではありませんか? –

関連する問題