我需要做这样的事情,
if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,会出现一个错误,指出变量"差异"可能尚未初始化.使变量"差异"全局也无济于事.
pol*_*nts 25
您需要学习的问题是:
{...}块if语句if-else而不是if (something) {...} if (!something) {...}顺便说一下,找到两个值的差异的惯用方法是:
int difference = Math.abs(firstVar - secondVar);
Run Code Online (Sandbox Code Playgroud)
请注意Math.abs有一个极端情况:当参数是Integer.MIN_VALUE,返回的值是Integer.MIN_VALUE.那是因为-Integer.MIN_VALUE == Integer.MIN_VALUE.这里的问题是数字的32位二进制补码表示.
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!)
Run Code Online (Sandbox Code Playgroud)
我们现在有一个明确赋值的问题:如果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
Run Code Online (Sandbox Code Playgroud)
初学者往往要做到这一点,但是这妨碍制造的可能性,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)
Run Code Online (Sandbox Code Playgroud)
仍然有办法改善这一点.
一旦你对语言和编程更加熟悉,你可以使用以下习语:
final int difference = (first_var > second_var) ? first_var - second_var
: second_var - first_var;
Run Code Online (Sandbox Code Playgroud)
这使用?:三元/条件运算符.小心这个操作员; 它有一些可能令人惊讶的行为,它肯定会被滥用.谨慎,明智地,惯用地使用.
| 归档时间: |
|
| 查看次数: |
27289 次 |
| 最近记录: |