当我引入while循环时,我得到变量的错误消息可能无法初始化...为什么会这样?

时间:2013-03-18 15:41:19

标签: java methods

我有一个调用方法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的返回输入中显示错误。发生了什么? 谢谢

6 个答案:

答案 0 :(得分:2)

使用while循环,理论上可能不会执行while循环,也就是说,当条件range简单地为false时。编译器不知道循环是否会被执行,因此它认为varialbe input可能没有被初始化。

答案 1 :(得分:1)

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

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

在访问它之前必须指定一些值,否则编译器将抛出错误。

所以你的解决方案是:因为你正在使用int输入,所以用int input = 0;

替换它

更多&amp;快速信息:http://anotherjavaduke.wordpress.com/2012/03/25/variable-initialization-and-default-values/

答案 2 :(得分:0)

您需要在声明时初始化局部变量。

int input = 0;

答案 3 :(得分:0)

请注意,您的控件变量为range = false,因此实际上该循环的主体永远不会执行,并且input未初始化。

答案 4 :(得分:0)

您需要将range更改为true,并在false循环内将其设置为while

在您的代码中,您永远不会进入while循环,因此,变量永远不会被初始化。

这会导致input永远不会被初始化。改变它,它应该工作。

答案 5 :(得分:0)

 the code works fine without the while loop, 

当然,因为你要做的第一件事是:

input = m2.getInteger(prompt);

因此初始化input。但是,事实上,当在while循环中包装它时,这可能不会执行。就目前而言,它不会执行,因为条件是错误的。