我需要做这样的事情,
if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;
当我尝试编译时,会出现错误,说明变量“差异”可能尚未初始化。使变量“差异”全局也无济于事。
答案 0 :(得分:25)
您需要了解的问题包括:
{...}
阻止if
语句if-else
代替if (something) {...} if (!something) {...}
顺便说一下,找到两个值差异的惯用方法是:
int difference = Math.abs(firstVar - secondVar);
请注意Math.abs
有一个极端情况:当参数为Integer.MIN_VALUE
时,返回的值为Integer.MIN_VALUE
。那是因为-Integer.MIN_VALUE == Integer.MIN_VALUE
。这里的问题是数字的32位二进制补码表示。
Math.abs(int)
if
以下是通过在if
int difference;
if (first_var > second_var) {
difference = first_var - second_var;
}
if (first_var < second_var) {
difference = second_var - first_var;
}
// note: difference is not definitely assigned here!
// (but at least it's in scope!)
我们现在遇到明确分配的问题:如果first_var == second_var
,变量difference
仍未分配值。
这是第二次尝试:
int difference = 0;
if (first_var > second_var) {
difference = first_var - second_var;
}
if (first_var < second_var) {
difference = second_var - first_var;
}
// note: difference is in scope here, and definitely assigned
初学者倾向于这样做,但是这排除了使difference
成为final
局部变量的可能性,因为它可能被赋值两次。
if-else
这是一个更好的尝试:
final int difference;
if (first_var > second_var) {
difference = first_var - second_var;
} else {
difference = second_var - first_var;
}
// note: difference is in scope, and is definitely assigned here,
// (and declared final)
仍有办法改善这一点。
一旦您对语言和编程感到满意,您可以使用以下习语:
final int difference = (first_var > second_var) ? first_var - second_var
: second_var - first_var;
这使用?:
三元/条件运算符。小心这个操作员;它有一些可能令人惊讶的行为,它肯定会被滥用。小心谨慎,谨慎使用。
答案 1 :(得分:3)
您有两种选择:
使用三元运算符在一行上执行条件?:
int difference = first_var > second_var ? first_var - second_var : second_var - first_var;
预先声明变量,然后执行条件。
int difference = 0;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
答案 2 :(得分:3)
您只能在一个地方声明变量。
基本解决方案是
int difference;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
但是在这种情况下,您可以使用内联?:运算符
int difference = (first_var > second_var) ?
first_var - second_var : second_var - first_var;
答案 3 :(得分:3)
这是因为变量可能确实没有被初始化。实际上,如果first_var
和second_var
彼此相等,则不会初始化。除此之外,即使您添加了第三个if
,编译器也可能不够聪明。将声明移到if
之外,并将其初始化为该行的值。
int difference = 0;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
但是,我只是做
int difference = Math.abs(first_var - second_var);
答案 4 :(得分:1)
首先,您必须在ifs语句之外定义巡视变量“difference”:
int difference;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
然后,一旦执行了ifs语句,编译器就无法确定您的变量是否具有值。例如,如果first_var和second_var具有相同的值,则不会分配差异。因此,如果您尝试使用变量,则会出现编译时错误。
要解决此问题,您有两种解决方案:
第一个解决方案是给你的变量一个默认值,如果没有其他条件完成,将使用该值:
int difference = 0;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
另一种解决方案是使用else if语句。当使用else if语句时,编译器能够确定是否在所有情况下分配您的变量:
int difference;
if (first_var > second_var) {
difference = first_var - second_var;
} else if (first_var < second_var) {
difference = second_var - first_var;
} else {
difference = 0;
}
答案 5 :(得分:0)
您确实可以在if语句中分配变量,但不能在if语句中初始化它。用简单的英语,您可以在if语句中为变量赋值,但不能在if语句中创建变量。原因是因为如果永远不满足if条件,if语句中的代码可能永远不会运行。
以下是我编写该代码的方法:
int difference = 0;
if (first_var > second_var)
difference = first_var - second_var;
else if (first_var < second_var)
difference = second_var - first_var;
答案 6 :(得分:0)
它可能未被初始化的原因是你考虑了A&lt; B,B&lt; A,但不是A == B.考虑到这一点:
if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;
if (first_var == second_var)
int difference = 0;