0
  boolean gotGoodGenInput = false;
  while (!gotGoodGenInput)
  {

    gotGoodGenInput = true;

    String inputGen = JOptionPane.showInputDialog
    (
      "Enter your Generation \n" +
      "It must be a number from 0 to 25"
    ); 

    if(inputGen != null)
    {  

      if (inputGen.isEmpty() || !inputGen.matches("[0-9]*")) 
      {
        JOptionPane.showMessageDialog
        (
          null,
          "Please input a number from 0 to 25",
          "Error",
          JOptionPane.ERROR_MESSAGE
        );
        gotGoodGenInput = false;
      }

      int GenNumber = Integer.parseInt(inputGen);

      if (GenNumber < 0 || GenNumber > 25)
      {
        JOptionPane.showMessageDialog
        (
          null,
          "Your number can't be less than 0 or greater than 25",
          "Error",
          JOptionPane.ERROR_MESSAGE
        );
        gotGoodGenInput = false;
      }

    }
    else
    {
      System.exit(0);
    }
  }

こんにちは、私が抱えている問題は、ユーザーが「a」(例として) を入力すると、「0 から 25 までの数字を入力してください」というエラーが表示されることです。

 if (inputGen.isEmpty() || !inputGen.matches("[0-9]*"))

gotGoodGenInput = false; になったときにループを再開することになっています。

しかし、intを解析しようとする次の部分に進み続けますが、「a」はintではないため、もちろんエラーになります

だから私の問題は、 gotGoodGenInput = false; に達したときに最初からやり直さないのはなぜですか。最初の if ステートメントで。

4

3 に答える 3

3

ラインの後

gotGoodGenInput = false;

行を追加

continue;

whileループの最初から再開します。

于 2013-02-28T19:52:56.907 に答える
2

ループを再開するには、設定するだけgotGoodGenInput=falseでは不十分です。変数の値を変更しましたが、ループを続行しないようにプログラムに指示していません。

記述した動作を取得するために、設定するcontinue;たびにステートメントを追加することをお勧めします。gotGoodGenInputfalse

また、Swing の InputVerifiers を調べることもできます。このスレッドを確認してください: Java Swing: Implementing a valid check of input values .

于 2013-02-28T19:58:29.000 に答える
0

文字列が空であるか整数と異なるかを確認するifステートメントの後に、elseが欠落しているようです。このように、ifステートメントに入りますが、int を解析しようとする次のステートメントに進みます。

于 2013-02-28T19:56:47.207 に答える