0

我有一个调用方法 1 的 main 调用方法 2:

    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 时。编译器不知道循环是否会被执行,因此它认为变量可能input没有被初始化。

于 2013-03-18T15:46:48.643 回答
1

您不能在方法中声明变量(在 Java 中)。

当您声明任何本地/块/方法变量时,它们不会获得默认值。

您必须在访问之前分配一些值,否则编译器会抛出错误。

所以您的解决方案是:由于您使用的是 int 输入,因此将其替换为 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

Note that your control variable is range = false, so in fact the body of that loop never executes and input is not initialized.

于 2013-03-18T15:46:23.340 回答
0

You need to change range to be true, and set it to false inside the while loop.

In your code, you're never entering the while loop, thus, the variable is never initialized.

This causes input to never be initialized. Change it and it should work.

于 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 回答