我是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();
}
有人可以为我纠正吗?我真的很感激!
答案 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)
以下是日常用语及其编程类似物中使用的一些常用符号:
&&
。||
。“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")) {
...
}