你能在if语句中有两个条件吗?

时间:2017-06-29 16:12:56

标签: java if-statement conditional conditional-statements

我是java编码的初学者,所以我经常浏览以找到具有我基本知识的初学者项目。我最近正在创建一个聊天程序,用户将与我的计算机聊天。这是代码的一部分,因为我不需要显示整个代码:

 System.out.println("Hello, what's our name? My name is " + answer4);
        String a = scanner1.nextLine();
        System.out.println("Ok, Hello, " + a + ", how was your day, good or bad?");
        String b = scanner2.nextLine();
        **if (b.equals("good"))** {
            System.out.println("Thank goodness");
        } else **if (b.equals("it was good"))** {
            System.out.println("Thank goodness");
        } else **if (b.equals("bad"))** {
            System.out.println("Why was it bad?");
            String c = scanner3.nextLine();
            System.out.println("Don't worry, everything will be ok, ok?");
            String d= scanner10.nextLine();
        }
        else **if (b.equals("it was bad"))**{
            System.out.println("Why was it bad?");
            String c = scanner3.nextLine();
            System.out.println("Don't worry, everything will be ok, ok?");
            String d= scanner10.nextLine();
        }

        if(age<18){System.out.println("How was school?");}
        else if (age>=18){System.out.println("How was work?");}

if语句的条件是粗体。第一个和第二个是相似的,第三个和第四个也是如此。我认为有可能让它们成为现实,但事实并非如此:

 if (b.equals("good"),b.equals("it was good")) {
            System.out.println("Thank goodness");
        }  else if (b.equals("bad"),(b.equals("it was bad"))) {
            System.out.println("Why was it bad?");
            String c = scanner3.nextLine();
            System.out.println("Don't worry, everything will be ok, ok?");
            String d= scanner10.nextLine();
        }

有人可以为我纠正吗?我真的很感激!

6 个答案:

答案 0 :(得分:10)

您可以使用logical operators合并boolean expressions

  • &&是合乎逻辑的(两个条件都必须为true
  • ||是合乎逻辑的(至少有一个条件需要true
  • ^ xor (恰好一个条件需要true
  • ==按身份比较对象)

例如:

if (firstCondition && (secondCondition || thirdCondition)) {
    ...
}

还有按位运算符:

  • &是一个按位
  • |是一个按位
  • ^ xor

它们主要在使用bits and bytes时使用。然而,还有另一个不同之处,让我们再看看这个表达式:

firstCondition && (secondCondition || thirdCondition)

如果您使用逻辑运算符并且firstCondition评估为false,那么Java 计算第二个或第三个条件作为整个逻辑的结果表达式已知为false。但是,如果使用按位运算符,则Java将不会停止并继续计算所有内容:

firstCondition & (secondCondition | thirdCondition)

答案 1 :(得分:2)

以下是日常用语及其编程类似物中使用的一些常用符号:

  • ”通常在日常用语中指“和”。因此,这将转换为Java中的AND运算符&&
  • / ”通常在日常用语中指“或”。因此,这将转换为Java中的OR运算符||

“XOR”只是“x || y,但两者不能同时为真”。这转换为Java中的x ^ y

在你的代码中,你可能想要使用“或”(你刚才使用了错误的“错误解决方案”:p),所以你应该使用“||”在第二个代码块中,它与第一个代码块相同。

希望这有助于:)

答案 2 :(得分:0)

您正在寻找“OR”运算符 - 通常由双重管道表示:||

 if (b.equals("good") || b.equals("it was good")) {
        System.out.println("Thank goodness");
 }  else if (b.equals("bad") || b.equals("it was bad")) {
        System.out.println("Why was it bad?");
        String c = scanner3.nextLine();
        System.out.println("Don't worry, everything will be ok, ok?");
        String d= scanner10.nextLine();
 }

答案 3 :(得分:0)

如果使用双栏(||),则可以有两个条件。他们的意思是“或”。这意味着只有 ONE 条件必须为循环才能执行。

这样的事情:

if(condition || otherCondition || anotherCondition) {
    //code here

如果您希望所有条件都为真,请使用&&。这意味着 ALL 条件必须为true才能执行循环。如果其中任何一个为假,则循环不会执行。

这样的事情:

if(condition && otherCondition && anotherCondition) {
    //code here

如果您希望某些条件成对,您也可以对条件进行分组。类似的东西:

if(condition || (otherCondition && anotherCondition)) {
    //code here

答案 4 :(得分:0)

这可能比你现在需要的答案更多。但是,正如其他几个人已经指出的那样,你需要OR运算符“||”。其他人没有提到过几点:

1)如果(b.equals(“good”)|| b.equals(“它很好”))&lt; - 如果“b”在这里为空,你将得到一个空指针异常(NPE) )。如果您真的在查看硬编码值,就像您在这里一样,那么您可以反转比较。例如。

if(“good”.equals(b)||“很好”.equals(b))

这样做的好处是逻辑完全相同,但你永远不会获得NPE,而逻辑将按照你的期望工作。

2)Java使用“短路”测试。在lay-terms中表示Java一旦确定结果就停止测试条件,即使所有条件尚未经过测试。 E.g:

if((b!= null)&amp;&amp;(b.equals(“good”)|| b.equals(“it is good”)))

由于短路性质,您不会在上面的代码中获得NPE。如果“b”为空,则可以确保Java无论下一个条件的结果如何,答案将始终为false。所以它不打算执行那些测试。

同样,这可能是您在此阶段准备处理的更多信息,但在不久的将来,您的测试的NPE会咬你。 :)

答案 5 :(得分:0)

有一种更简单的方法。

if (b.contains("good")) {
  ...
}
else if (b.contains("bad")) {
  ...
}