我没有发现这个代码有任何错误,但是eclipse告诉我变量没有被初始化。它只是一个警告,但在编译之后它也不起作用。我根本找不到错误,这个代码的内容是100%正确的。请注意,此代码的结构无法轻易更改,因为下面提供的代码已经简化,因此您没有那么多内容可读; - )
int min1; float somefloat;
try {
//setting values for min and somefloat
min1 = 1;
somefloat = 0.92f;
} catch (IOException ioe) {
System.err.println("Read Exception");
}
while (true){
//warning: variables min1 and somefloat may not be initialized.
float value1 = (1023 - min1) * somefloat;
System.out.println("Value: " + value1);
}
答案 0 :(得分:2)
您必须在输入任何 try
块之前初始化所有变量。 Java编译器不知道在您的情况下,不会导致异常。
从理论上讲,可能是一个异常某处,它会使你的变量未初始化。这是不可接受的。因此警告。
只需将变量初始化为零。
int min1 = 0;
float somefloat = 0f;
答案 1 :(得分:1)
编译器没有分析是否在具体情况下初始化变量或者不变量。它确保如果变量仅在尝试中初始化,而不在捕获或最终中初始化,则可以确保它们可能不要初始化。
使用"明显"进行类似的尝试条件如if(1>0) {}
。编译器编译而不是对代码进行分析。虽然对于人来说很明显会发生一些事情,java编译器没有代码来检测这种情况,也没有用java语法指定。因此,您希望编译器能够保持编译清晰,可预测和快速的AI。
您的代码有BTW错误报告,而不是您所描述的错误,因为没有地方IOException
可以被抛出。
答案 2 :(得分:0)
您必须在声明它们时或至少在try-catch
块之外初始化它们。因为编译器无法确定try-catch块内的初始化是否会正常完成,在这种情况下,您将在外部使用未初始化的变量。
int min1=0; float somefloat=0.0f;
答案 3 :(得分:0)
然而eclipse告诉我变量没有初始化
显示警告,因为在try
内初始化变量之前抛出异常是可能的。然后在while
范围内变量保持未初始化状态。
答案 4 :(得分:0)
如果它进入catch
块,它们应该具有初始值。试试这个:
int min1 = 0; float somefloat = 0f;
try {
//setting values for min and somefloat
min1 = 1;
somefloat = 0.92f;
} catch (IOException ioe) {
System.err.println("Read Exception");
}
while (true){
//warning: variables min1 and somefloat may not be initialized.
float value1 = (1023 - min1) * somefloat;
System.out.println("Value: " + value1);
}
答案 5 :(得分:0)
你需要在声明期间初始化变量。在try中的变量赋值将覆盖该值,如果发生任何异常(不知道你的情况如何......),它将采用默认值。在编译期间,编译器不会查看您的代码是否会抛出异常(throw
除外,它需要匹配catch
)因此需要显式初始化。
答案 6 :(得分:-1)
private void tset(){
int min1; float somefloat;
try {
//setting values for min and somefloat
min1 = 1;
somefloat = 0.92f;
while (true){
//warning: variables min1 and somefloat may not be initialized.
float value1 = (1023 - min1) * somefloat;
System.out.println("Value: " + value1);
}
} catch (Exception ioe) {
System.err.println("Read Exception");
}
}
这可能是您正在寻找的代码......