0

Javaでは、valuseをまたはとして使用しながら、ユーザーの入力を例外メッセージに含めることは可能intですdoubleか?たとえば、数字(たとえば、5)を入力する必要がありますが、代わりに(5r)のようなファットフィンガーを入力する必要があります。

「5rを入力しましたが、数字を入力する必要があります。」などのメッセージを表示することはできますか?

ここでは、Javaで変数を出力する従来の方法を使用してみました。

try {
  System.out.println();
  System.out.println("Value: ");
  double value = sc.nextDouble();sc.nextLine();
  exec.ds.push(value);
} 
catch (Exception e1) {
    System.out.println(e1+ "You entered:  " + value + ": You must enter a number");                            
}

この場合、私は例外メッセージに表示されようとしてvalueいます。ここで、valueはユーザーの無効な入力です。

それでvalueエラーが発生しますcannot find symbol

以下は私が思いついた答えです。私がこの回答を選択した理由は、回答のほとんどが「0.0を入力しました...」という出力を生成したためです。これは、回答が最初にコンソールに出力される文字列である必要があるためです。さらに、プログラムの他の場所で数値として使用するために、文字列はDouble型またはInteger型のオブジェクトにキャストしました。

String value = null; //declared variable outside of try/catch block and initialize. 
try {
  System.out.println();
  System.out.println("Value: ");
  value = sc.nextLine(); //Accept String as most of you suggested
  Double newVal = new Double(value); //convert the String to double for use elsewhere
  exec.ds.push(newVal); //doulbe is getting used where it would be a 'number' instead of string

} 
catch (Exception e1) {
    System.out.println(e1+ "You entered:  " + value + ": You must enter a number"); //the String valuse is received and printed as a String here, not a 'number'            
} //now prints what the users inputs...
4

5 に答える 5

1

エラーが発生する値はシンボルを見つけることができません。

ローカルブロックで値を宣言しました。そして、あなたはブロックの外でそれにアクセスしようとしています。

「5rを入力しましたが、数字を入力する必要があります。

より良いオプションは、フラグ変数を使用して、ユーザーが正しい番号を入力するまでループすることです。

boolean flag = true;
double value = 0;
while(flag)
{
    try {
        System.out.println();
        System.out.println("Value: ");
        value = sc.nextDouble();
        exec.ds.push(value);
        flag = false;
    } 
    catch (Exception e1) {
        System.out.println(e1+ "You entered:  " + value + ": You must enter a number");                            
    }
}
于 2013-03-24T14:49:15.143 に答える
1

ユーザー入力を取得します。

String input = '';

try{

    Console console = System.console();
    input = console.readLine("Enter input:");
}

...そしてあなたのキャッチであなたはすることができます:

catch (Exception e1) {
    System.out.println(e1+ "You entered:  " + input + ": You must enter a number");                            
  }

上記以外は何が問題なのかわかりません。Javaでユーザー入力を取得する方法をグーグルで検索し、入力を取得して変数に入れ、エラー時に出力することができます。

于 2013-03-24T14:50:52.970 に答える
1

valuecatchブロックのスコープがなくなったため、これは機能しません。代わりに、試す前に宣言することができます。

double value = 0;
try {
  System.out.println();
  System.out.println("Value: ");
  value = sc.nextDouble();sc.nextLine();
  exec.ds.push(value);
} catch (Exception e1) {
  System.out.println(e1+ "You entered:  " + value + ": You must enter a number");                            
}

ただし、doubleの構文エラーが原因で例外がスローされた場合、これは役に立ちません。これを処理するには、を読んでStringからに変換する必要がありますdouble

于 2013-03-24T14:50:59.933 に答える
1

この場合、-noを呼び出すとsc.nextLine()例外がスローされるため、変数に値は書き込まれませんvalue

さらに、valueこの場合はローカル変数であり、他のコードブロックからは使用できません。

于 2013-03-24T14:51:09.080 に答える
0

ドキュメント によるとnextDouble()

入力の次のトークンをdoubleとしてスキャンします。InputMismatchException次のトークンを有効なdouble値に変換できない場合、このメソッドはスローします。

したがって、入力をdoubleに変換できない場合は、例外がスローされます。入力された文字列を例外メッセージに入力する場合は、その行を文字列として読み取り、それをdoubleに解析してみることをお勧めします。それが失敗した場合は、読み取り行を例外メッセージに含めることができます。

于 2013-03-24T14:53:22.350 に答える