我需要做类似于这样的事情:
if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;
当我尝试编译这个程序时,出现了一个错误,指出变量“difference”可能没有被初始化。 将变量“difference”定义为全局变量也没有帮助。
我需要做类似于这样的事情:
if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;
你需要学习的问题包括:
{...}
块来表示if
语句if-else
而不是if (something) {...} if (!something) {...}
顺便说一下,找到两个值的差异的惯用方式是:
int difference = Math.abs(firstVar - secondVar);
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;
这里使用了?:
三元/条件运算符。请注意,这个运算符有一些行为可能会让人惊讶,并且它确实容易被滥用。请谨慎、审慎、地道地使用。
您有两个选项:
Do the condition on one line using the ternary operator ?:
int difference = first_var > second_var ? first_var - second_var : second_var - first_var;
Declare the variable up front, then do the condition.
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;
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;
这是因为变量可能确实没有被初始化。实际上,如果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);
首先,你必须在if语句之外定义你的变量"difference":
int difference;
if (first_var > second_var)
difference = first_var - second_var;
if (first_var < second_var)
difference = second_var - first_var;
然后,编译器无法确定在执行两个if语句后,您的变量是否会有一个值。例如,如果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;
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;
}
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;
你确实可以在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;
{...}
是一种风格选择。当然,如果您不小心的话,就会遇到悬挂else问题,但这个教训只是在省略{...}
时要小心 :) - Peter Alexander