0

これは私が完了しなければならない課題です。

誰かが私を正しい方向に導くことができますか?

プログラムはコンパイルされますが、正しく実行されません。

エラーは InputMissmatch 例外です。

4

2 に答える 2

3

あなたが得ているエラーは、ある種のデータを別のデータとして使用しようとしていることを意味します.あなたの場合、おそらく文字列をフロートとして使用しようとしています.

Scanner クラスの次のメソッドのいずれかを使用するときは、まず、ユーザーからの適切な入力があることを確認する必要があります。

そのためには、hasメソッドを使用する必要があります。

あなたの問題は、 Scanner.nextFloat(); を使用する前に、入力が正しいフロートであるかどうかを確認していないことです。

次のようにする必要があります。

if (hope.hasNextFloat())
{
    // Code to execute when you have a proper float, 
    // which you can retrieve with hope.nextFloat()
}
else
{ 
    // Code to execute when the user input is not a float
    // Here you should treat it properly, maybe asking for new input
}

それはあなたを正しい方向に向けるのに十分なはずです.

また、詳細については、スキャナAPI のドキュメントを確認してください。

編集

また、ユーザーに「A」、「B」などの文字 (または文字列) を入力するように求めていますが、それらをフロートと比較しようとしています。それは間違っています。次のように、それらを文字列または文字と比較する必要があります。

if (hope.hasNextString())
{
   if (hope.nextString().equals("A"))
   {
       // Code for option "A"
   }
   else if (hope.nextString().equals("B"))
   {
       // Code for option "B"
   }
   else ...
}

そこでスイッチを使うこともできますが、まだ Java に慣れていないようですので、別の機会に譲ります。

于 2013-03-08T17:29:22.793 に答える
1

あなたの問題は、float フィールドに文字を入力していることです。あなたのプログラムでは、ユーザーにフロートを入力するように求めています:

A = hope.nextFloat();

ただし、文字「A」を入力すると、「A」は浮動小数点数ではなく文字列であるため、例外が発生します。

問題を解決するより簡単な方法は、すべての選択肢フィールドを使用する代わりに、ユーザーがスキャナーから入力した入力を次のように読み取ることです。

String choice = hope.next();

次の if ステートメントでは、文字列の選択肢からの値が特定の文字と等しいかどうかを確認します。たとえば、

if (choice.equals("A")) {
        number4 = (number1 + number2 + number3);
        System.out.printf("Your results are:" + (number4));
    } 

そして、他の選択肢についても同じことができます。

于 2013-03-08T17:37:48.883 に答える