0

メニューの選択肢を読んで、2 と 5 以外の任意の数字を入力します。

String choice = promptUser(choicePrompt);
try {
      outputInfo(String.format("choice=...%s...",choice));
      int c = Integer.parseInt(choice);
      /* process it */
}catch (NumberFormatException e) {

outputInfo(String.format("choice=%s",choice));
outputInfo(e.toString());
}

public static void outputInfo(String msg)
{
    System.out.printf("\t%s\n",msg);
}

良い出力:

    Enter Option: 1
    choice=...1...

悪い出力:

    Enter Option: 2
    choice=...2...
    choice=2
    java.lang.NumberFormatException: For input string: ""

アップデート:

「2」をハードコーディングしましたが、それでも失敗します!:

String choice = promptUser(choicePrompt);
try {
     choice="2";
     outputInfo(String.format("choice=...%s...",choice));
     int c = Integer.parseInt(choice);
     /* process it */
}catch (NumberFormatException e) {

outputInfo(String.format("choice=%s",choice));
outputInfo(e.toString());
}

ハードコーディング「5」も失敗しますが、「1」は機能します!!!

どんなアイデアもありがたく受け取った。

サイモン

4

3 に答える 3

1

あなたのpromptUser()方法が次のようなものであると仮定すると:

static String promptUser() {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    try {
        return reader.readLine();
    }
    catch(Exception ex) {
        return null;
    }
}

(パラメーターなしで) プログラムは期待どおりに動作します。確かに、そのコードには 2 または 5 を異なる方法で処理するものは何もありません。空の文字列を取得している場合、プロンプト ユーザー メソッドが正しく機能していると確信していますか?

いずれにせよ、ここに投稿したコードは本質的に正しいです。より完全なプログラムには、ここに縮小したときに現れない何か他の問題があると思います。たとえば、ローカル変数がフィールドを隠していて、自分が思っている値を使用していないというケースに遭遇している可能性があります (ただし、この時点では、私は推測にすぎません)。

于 2013-09-19T09:37:05.050 に答える
0

更新しました

promptUser メソッドが空の文字列 "" を返しているようです。ParseInt メソッドを呼び出す前に、選択肢が空かどうかを確認します

また、trim() を追加して、入力の前後のスペースを削除することもできます

  if(choice!=null && !"".equals(choice))
     int c = Integer.parseInt(choice.trim());
于 2013-09-19T09:35:04.560 に答える
0

printStackTrace() はあなたの友達です。数値形式の例外はさらに下 ('process it' コード内) にあり、そこでキャッチされていないことが判明しました。これはデータ駆動型であるため、他のマシンでは発生しませんでした。

ご支援いただきありがとうございます。

サイモン

于 2013-09-19T13:38:19.303 に答える