如何在Java中的if语句中为变量赋值

Dan*_*aya 8 java

我需要做这样的事情,

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位二进制补码表示.

参考


尝试#1:在宣布之前宣布 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仍然没有赋值.


尝试#2:在声明时初始化

这是第二次尝试:

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局部变量,因为它可能分配的值的两倍.


尝试#3: 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)

仍然有办法改善这一点.


尝试#4:三元/条件运算符

一旦你对语言和编程更加熟悉,你可以使用以下习语:

final int difference = (first_var > second_var) ? first_var - second_var
                                                : second_var - first_var;
Run Code Online (Sandbox Code Playgroud)

这使用?:三元/条件运算符.小心这个操作员; 它有一些可能令人惊讶的行为,它肯定会被滥用.谨慎,明智地,惯用地使用.

参考