Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在if语句中为变量赋值_Java - Fatal编程技术网

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

在Java中,如何在if语句中为变量赋值,java,Java,我需要这样做 if (first_var > second_var) int difference = first_var - second_var; if (first_var < second_var) int difference = second_var - first_var; if(第一个变量>第二个变量) int差=第一个变量-第二个变量; 如果(第一个变量

我需要这样做

if (first_var > second_var)
  int difference = first_var - second_var;
if (first_var < second_var)
  int difference = second_var - first_var;
if(第一个变量>第二个变量)
int差=第一个变量-第二个变量;
如果(第一个变量<第二个变量)
int差=第二个变量-第一个变量;

当我试图编译它时,会出现一个错误,说明变量“difference”可能尚未初始化。将变量“difference”设为全局变量也无济于事

您需要了解的问题有:

  • 变量的范围
  • 块声明及其创建新作用域的方式
  • 为什么您更喜欢对
    if
    语句使用
    {…}
  • 如何保证明确的分配
  • 何时使用
    if-else
    而不是
    if(something){…}if(!something){…}
顺便说一下,找出两个值之差的惯用方法是:

int difference = Math.abs(firstVar - secondVar);
请注意,
Math.abs
有一个特殊情况:当参数为
Integer.MIN\u VALUE
时,返回值为
Integer.MIN\u VALUE
。这是因为
-Integer.MIN\u VALUE==Integer.MIN\u VALUE
。这里的问题是数字的32位2的补码表示

工具书类
  • (改为:最负数)

尝试#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!)
初学者倾向于这样做,但这排除了产生
差异
a
最终
局部变量的可能性,因为它可能被赋值两次


尝试#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;
这使用了
?:
三元/条件运算符。一定要小心这个操作员;它有一些行为可能令人惊讶,而且它肯定会被滥用。谨慎、明智、习惯地使用

工具书类
您有两种选择:

  • 是否使用三元运算符在一行上计算条件

    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;
    
    int差=0;
    如果(第一个变量>第二个变量)
    差异=第一个变量-第二个变量;
    如果(第一个变量<第二个变量)
    差异=第二个变量-第一个变量;
    

  • 只能在一个位置声明变量

    基本的解决办法是

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

    这是因为变量可能确实没有初始化。实际上,如果
    first_var
    second_var
    彼此相等,它就不会被初始化。除此之外,即使您添加了第三个
    if
    ,编译器也可能没有足够的智能来理解它。将声明移到
    if
    s之外,并将其初始化为该行上的值

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

    首先,您必须在ifs语句之外定义巡更变量“差异”:

    int difference;
    if (first_var > second_var)
        difference = first_var - second_var;
    if (first_var < second_var)
        difference = second_var - first_var;
    
    int差;
    如果(第一个变量>第二个变量)
    差异=第一个变量-第二个变量;
    如果(第一个变量<第二个变量)
    差异=第二个变量-第一个变量;
    
    然后,编译器无法确保在执行两个ifs语句后,您的变量将有一个值。例如,如果第一个变量和第二个变量具有相同的值,则不会分配差异。因此,如果尝试使用变量,将出现编译时错误

    要解决此问题,您有两种解决方案:

    第一种解决方案是为变量提供一个默认值,如果没有其他条件完成,将使用该值:

    int difference = 0;
    if (first_var > second_var)
        difference = first_var - second_var;
    if (first_var < second_var)
        difference = second_var - first_var;
    
    int差=0;
    如果(第一个变量>第二个变量)
    差异=第一个变量-第二个变量;
    如果(第一个变量<第二个变量)
    差异=第二个变量-第一个变量;
    
    另一种解决方案是使用elseif语句。使用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;
    }
    
    int差;
    如果(第一个变量>第二个变量){
    差异=第一个变量-第二个变量;
    }否则如果(第一个变量<第二个变量){
    差异=第二个变量-第一个变量;
    }否则{
    差异=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;
    
    int差=0;
    如果(第一个变量>第二个变量)
    差异=第一个变量-第二个变量;
    否则如果(第一个变量<第二个变量)
    差异=第二个变量-第一个变量;
    
    它可能没有被初始化的原因是您考虑了A
    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(第一个变量>第二个变量)
    int差=第一个变量-第二个变量;
    如果(第一个变量<第二个变量)
    int差=第二个变量-第一个变量;
    如果(第一个变量==第二个变量)
    int差=0;
    
    使用
    {…}
    是一种风格选择。当然,如果你不小心的话,你可能会遇到悬而未决的else问题,但是如果你忽略了
    {…}
    :)@Peter Alexander格式化和缩进也是一种样式选择的话,那么教训就是要小心。。。明白我的意思吗?;)
    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;
    }
    
    int difference = 0;
    
    if (first_var > second_var)
       difference = first_var - second_var;
    else if (first_var < second_var)
       difference = second_var - first_var;
    
    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;