0

メソッド2を呼び出すメソッド1を呼び出すメインがあります。

    public class azza_wahada_A3Q1 {
           public static void main (String[] args) {
           Method1 m1 = new Method1();


      int age = m1.getValidNumber("Please enter your age.", 0, 110);

    //int age = m2.getInteger("Please enter your age.");
    System.out.println("u r age is \n"+age);
    }
    }

public class Method1 {

public static int getValidNumber(String prompt, int min, int max){
   int input;
   Method2 m2 = new Method2();
   Method3 m3 = new Method3();
   Boolean range = false;

   while(range){
        input = m2.getInteger(prompt);

        if (input > min && input < max){
            range = true;
           // return input;
        }
        else{
            m3.showError(input,min, max);
            range = false;
        }

   }
   return input;
  }
}
import javax.swing.JOptionPane;
public class Method2 {
  public static int getInteger(String prompt){

  String message;
  int getInt;

  message = JOptionPane.showInputDialog(null, prompt);
  getInt =  Integer.parseInt(message);
  return getInt ;
}

}
import javax.swing.JOptionPane;
public class Method3 {
  public static void showError(int number, int min, int max){

 String error_message;
 error_message = JOptionPane.showInputDialog(null, "Please enter a new number");

}

}

なぜそれが起こるのですか?コードはwhileループなしで正常に機能します。ループを導入すると、入力変数が初期化されていない可能性があるというエラーメッセージが表示され、メソッド1の戻り入力でエラーが表示されます。何が起こっているのでしょうか。ありがとうございました

4

6 に答える 6

2

ループを使用すると、while理論的にはwhileループが実行されない可能性があります。つまり、条件がrange単にfalseに値する場合です。コンパイラはループが実行されるかどうかを知らないため、varialbeinputが初期化されない可能性があると考えます。

于 2013-03-18T15:46:48.643 に答える
1

メソッド(Javaの場合)で変数を宣言することはできません。

ローカル/ブロック/メソッド変数を宣言すると、デフォルト値は取得されません。

アクセスする前に値を割り当てる必要があります。そうしないと、コンパイラがエラーをスローします。

したがって、解決策は次のとおりです。int inputを使用しているため、int input=0に置き換えます。

詳細とクイック情報:http ://anotherjavaduke.wordpress.com/2012/03/25/variable-initialization-and-default-values/

于 2013-03-18T16:07:50.577 に答える
0

宣言時にローカル変数を初期化する必要があります。

int input = 0;
于 2013-03-18T15:42:33.230 に答える
0

制御変数はrange = falseであることに注意してください。実際、そのループの本体は実行されinputず、初期化されません。

于 2013-03-18T15:46:23.340 に答える
0

に変更rangeし、ループ内にtrue設定する必要があります。falsewhile

コードでは、whileループに入ることがないため、変数が初期化されることはありません。

これによりinput、初期化されません。それを変更すると、動作するはずです。

于 2013-03-18T15:46:34.480 に答える
0
 the code works fine without the while loop, 

確かに、最初に行うのは次のとおりです。

input = m2.getInteger(prompt);

したがって、を初期化しますinput。ただし、実際には、これをwhileループでラップすると、これが実行されない場合があります。現状では、条件が偽であるため実行されません。

于 2013-03-18T15:46:59.093 に答える