gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:03 38 4
gpt4 key购买 nike

我需要做这样的事情,

if (first_var > second_var)
int difference = first_var - second_var;
if (first_var < second_var)
int difference = second_var - first_var;

当我尝试编译它时,出现一个错误,指出变量“difference”可能尚未初始化。使变量“差异”成为全局变量也无济于事。

最佳答案

你需要学习的问题是:

  • 变量范围
  • block 声明以及如何创建新范围
  • 为什么您应该更喜欢将 {...} block 用于 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 位二进制补码表示。

引用资料


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

我们现在有一个明确赋值的问题:如果 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

初学者倾向于这样做,但这排除了使 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)

在这方面仍有改进的方法。


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

一旦您熟悉了语言和编程,您就可以使用以下习语:

final int difference = (first_var > second_var) ? first_var - second_var
: second_var - first_var;

这使用了 ?: 三元/条件运算符。小心这个运算符(operator);它有一些可能令人惊讶的行为,并且肯定会被滥用。谨慎、明智、惯用地使用。

引用资料

关于java - 如何在 Java 中的 if 语句中为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594427/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com