这是一个奇怪的问题,我知道,但我需要编写一个包含 3 个问题的程序,基本上 [(a OR b) AND c] 不使用 if。我的老师想让我们问用户动物是否是黑色的,然后回答 y 或 n。如果 n 询问它是否为白色并回答 y 或 n。如果任一陈述为真,则询问它是否友好,回答 y 或 n。如果它是黑色或白色且友好的,那么我们会收到一条消息,它可以和我一起回家,否则我们会收到一条抱歉消息。我的问题是她说我们只能使用一个 if 并且必须使用 compareToIgnoreCase 和一个函数。我可以用 if 来做到这一点,但我什至不知道如何在不使用 if 的情况下开始。请帮忙,我已经用谷歌搜索过,阅读了所有听起来很有希望的各种答案,而我一直在寻找的所有内容都指示我使用 if 语句。
问问题
42 次
3 回答
1
这似乎是一个教你短路评估的问题。这个想法是answersYesTo(String question)
在你的布尔表达式中使用并使用它(a || b) && c
。短路评估将从评估开始,a
并且仅在评估b
为a
假时进行评估。这样做的原因是如果a
为真,那么我们已经知道它a||b
为真,因此无需评估子表达式的最后一部分。
此外,c
如果评估为 false,则不会评估a||b
,因为此时我们知道表达式将评估为false
.
以下代码显示了一种可能的实现:
导入 java.io.Console;
public class App
{
static public void main(String [] args) {
boolean allowedToBringHome =
(answersYesTo("Is the animal black?")||answersYesTo("Is the animal white?"))
&& answersYesTo("Is it friendly?");
if( allowedToBringHome ) {
print("You can bring the animal home.");
}
else {
print("Sorry, you can't bring the animal home.");
}
}
static boolean answersYesTo(String question) {
String answer = System.console().readLine(question);
return answer.compareToIgnoreCase("y")==0;
}
static void print(String msg) {
System.out.println(msg);
}
}
注意:使用短路评估时,请始终考虑代码的可读性。复杂的表达式变得难以快速阅读和掌握,这增加了引入错误的风险。
于 2013-03-07T18:49:05.090 回答
0
您可以尝试使用三元运算符(http://en.wikipedia.org/wiki/%3F:)
您没有使用实际的“if”运算符,而是使用 if/else。
例子:
如果 (a == b) 返回 1; 否则返回 0;
是相同的
返回(a == b)?1 : 0
于 2013-03-07T18:05:24.223 回答
0
我认为我们不会为您做作业,但根据您的老师对使用“如果”的定义,您也许可以使用三元运算符。
即你可以写 if (A) do x else do y as A 吗?x:是的。
或者,阅读 switch/case 语句。对于这类事情,这不是一个很好的解决方案,但确实适用于您的限制。
于 2013-03-07T18:05:28.023 回答