我有一个调用方法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的返回输入中显示错误。发生了什么? 谢谢
答案 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循环中包装它时,这可能不会执行。就目前而言,它不会执行,因为条件是错误的。