0
  String inputRules = JOptionPane.showInputDialog
  (
  "Enter your rules. \n" +
  "In the form: a=x"
  );

    boolean gotGoodRuleInput = false;

    while (!gotGoodRuleInput)
    {
      gotGoodRuleInput = true;   

      char a = inputRules.charAt(0);

      for (int i= 2; i<inputRules.length(); i++)
      {
      char x = inputRules.charAt(i);
      if (a == x)
      {
        JOptionPane.showMessageDialog
        ( 
          null,
          "a can not equal x",
          "Error",
          JOptionPane.ERROR_MESSAGE
        );
        gotGoodRuleInput = false;
       }
      }
    }

こんにちは、ユーザーの入力を確認しようとしています。x での入力が a と等しい場合、エラー ダイアログ ボックスが表示されます。私が抱えている問題は、「a can not equal x」というエラー ダイアログ ボックスが何度も表示され、[OK] を押しても閉じないことです。forループに関係していると思いますが、わかりません。

4

3 に答える 3

1

ロジックの問題、ロジックの外観

while (!gotGoodRuleInput)
    {

...

エラーの場合

gotGoodRuleInput = false;

何が起こっている:  

  1. 条件付きでチェック
  2. while 条件を false に設定する
  3. 読む
  4. すべての入力値をループする
  5. コードをチェック
  6. ダイアログを表示
  7. 上記の条件が true の場合、while 条件を true に設定します
  8. 最初のステップに行く
于 2013-02-27T05:05:59.540 に答える
1

の設定はinputRulesループの外にあるため、エラー状態が発生すると、そこから抜け出すことはできません。

于 2013-02-27T04:55:53.137 に答える
0

John が言ったように、inputRules はループの外にあるため、何も変更されません。これがあなたが達成しようとしていたものかどうかはわかりませんが、これでループをすべて置き換えることができるかどうか.

String[] input = inputRules.split("=");
if (input[0].equals(intput[1])) {
    JOptionPane.showMessageDialog
    ( 
        null,
        "a equals x"
    );
    gotGoodRuleInput = true;
} else {
    JOptionPane.showMessageDialog
    ( 
        null,
        "a can not equal x",
        "Error",
        JOptionPane.ERROR_MESSAGE
    );
    gotGoodRuleInput = false;
}
于 2013-02-27T05:04:33.653 に答える