java 中这两个简单的 if 语句有什么区别

What's the difference between these 2 simply if statements in java

正如问题所问,我正在做一个关于创建形状边界框的作业。我试图对最大 X 坐标进行比较,但它在以下代码中无法按预期工作。

public class Test{
    public static void main(String []args) {
        Scanner in = new Scanner(System.in);
        double x1;
        double x2;
        double x3;
        double maxX= 0;
        System.out.println("input x1");
        x1 = in.nextDouble();
        System.out.println("input x2");
        x2 = in.nextDouble();
        System.out.println("input x3");
        x3 = in.nextDouble();

            if(x1>=x2) {
                 if(x1>=x3) {
                     maxX = x1;
                 }
                }
             else if(x2>=x1) {
                 if(x2>=x3)
                     maxX = x2;
             }
             else {
                 maxX = x3;
             }

如果我把x1 =2,x2=3,x3=5。返回值将等于零。这是初始化值。 但是程序会 运行 正确地使用以下代码。

public class Test{
    public static void main(String []args) {
        Scanner in = new Scanner(System.in);
        double x1;
        double x2;
        double x3;
        double maxX= 0;
        System.out.println("input x1");
        x1 = in.nextDouble();
        System.out.println("input x2");
        x2 = in.nextDouble();
        System.out.println("input x3");
        x3 = in.nextDouble();

           
            
        
        if((x1>=x2)&&(x1>=x3)){
            maxX=x1;
                }
        else if((x2>=x1)&&(x2>=x3)){
            maxX=x2;
            }
        else
            maxX=x3;
        System.out.println(maxX);
    }
}

这次系统会打印5,但我真的不明白。对于其他三个坐标,我使用了第一种方法,效果很好。我不知道为什么这个特定的 maxX 方法会出现问题。

在第一个示例中,您嵌套了 if-else 语句,而在第二个示例中,您使用了逻辑运算符。顺其自然吧。

在第一个例子中,是x1>=x2?不是这样我们降到else。是x2>=x1?是的,所以我们执行下面的语句。是x2>=x3?事实并非如此,我们已经完成了。 maxX 未分配值。您不执行最后的 else 因为 x2>=x1 返回 true.

在第二个例子中,是(x1>=x2)&&(x1>=x3)truefalse。我们知道x1>=x2false所以表达式是false,意思是下降到else。是(x2>=x1)&&(x2>=x3)true还是falsex2>=x1truex2>=x3false,所以表达式是 false。这意味着我们下降到最后的 elsemaxX=x3.

它是一个接一个地求条件,还是同时求条件的区别。

在第一个示例中,对于 x2 大于 1 但小于 x3 的情况,您的第二个语句不执行任何操作。你之前也有同样的问题:

    if(x1>=x2) {
       if(x1>=x3) {
           maxX = x1;
       }
       else {
          //x1 >= x2 && x1 < x3 => x3 is the greatest
       }
    }
    else if(x2>=x1) {
       if(x2>=x3)
          maxX = x2;
       }
       else {
          // x2 >= x1 && x2 < x3 => x3 is the greatest
       }
    else {
       // Can never be reached, as either x1 >= x2 or x2 >= x1
       maxX = x3;
    }

希望这个回答对你有帮助,我以前从来没有给过。