如果 Java 包含相似的比较,为什么要跳过 if 子句?

Why is Java skipping an if clause if they contain similar comparisons?

所以,这周我才开始接触 Java,我发现了一些很奇怪的东西。我将添加代码,然后引导您完成。

import java.util.Scanner;

public class kids
{
    public static void main(String[] args)
    {
        System.out.println("How old are you, doll?");
        
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();

        System.out.println("Doggie lover or a cat person?");
        String animal = scanner.nextLine();
        
        if(age < 18 && animal.contains("dog")) // 1st comparison
        {
            System.out.println("Hello cutie, welcome");
        }
        else if(age < 18 && animal.contains("cat")) // 2nd comparison
        {
            System.out.println("Oh, hi"); // This statement gets skipped
        }
        else if(age < 18 && animal.contains("cat")); // 3rd comparison
        {
            System.out.println("Hiya, Doggie lover!");
        }
    }
}

我在这里附上了我的输出 Output

所以,我给字符串 animal 输入了 "dogcat"。很明显,至少对我来说,三个比较应该 return TRUE 但我的输出却另有说明。似乎只有第一次和第三次比较 return TRUE 但很明显,如果第三次比较 return 为 TRUE,因为它包含字符串“cat”,所以第二次比较也是如此。为什么 Java 在这里跳过我的比较?

对于输入dogcat,它只执行第一个if条件。由于其他两个条件作为 else if 条件给出,它们不会被执行。

由于在第 3 个 if 条件之后有一个分号的拼写错误,所以发生了混淆。所以错字为第 3 个 if 条件做了一个空语句。

由于打字错误,最后一组花括号中的语句不是第 3 个 if 条件的一部分。