5

我正在努力复习我的 Java,因为它已经很长时间了,并开始在 CodingBat.com 上做一些热身。(注意可能会出现剧透);)

我只是做了一个非常简单的说明:

给定 2 个整数,a 和 b,如果它们为 10 或它们的总和为 10,则返回 true。

使 10(9, 10) → 真
使 10(9, 9) → 假
使 10(1, 9) → 真

我的解决方案是:

public boolean makes10(int a, int b)
{
  if( a==10 || b==10)
    return true;
  else
  {
      if( (a+b)==10 )
          return true;
       else
          return false;
  }
}

给出的解决方案是:

public boolean makes10(int a, int b) {
  return (a == 10 || b == 10 || a+b == 10);
}

我的问题是,在 a=10 或 b=10 的情况下,给定解决方案的 if 语句是否会终止并返回 true,或者它是否会首先完成检查每个需要不需要的加法操作的条件?(即 a+b)

在 C++ 中有这种行为的名称,但对于我的生活,我不记得它是什么。

4

2 回答 2

6

条件将被评估,直到一个子条件评估为true。如果第一个条件评估为true第二个和第三个条件将不被评估。

这是or运营商的天性||

考虑以下示例:

public class Conditions {

    public static boolean isTrue(){
        System.out.println("Is True");
        return true;
    }

    public static boolean isFalse(){
        System.out.println("Is False");
        return false;
    }

    public static void main(String[] args) {
        if(isFalse() || isTrue() || isTrue()){
            System.out.println("Condition passes");
        }
    }
}

哪个输出:

Is False
Is True
Condition passes

请注意,调用该方法的第三个条件isTrue()未被评估。

于 2013-08-05T16:03:15.817 回答
0

任何 true 将决定所有 OR 的结果 (A||B||C||D||E)

任何错误将决定所有AND的结果(A&&B&&C&&D&E)

因此,在第一次出现决定值时,就会评估该语句。

于 2013-08-05T16:07:12.087 回答