在Ruby中做出决策是错误的

时间:2015-06-14 15:40:39

标签: ruby

我被困在决策方面。当答案变量为N 时(当我输入N时表示我不想在不同的行中打印文本)和标记变量是Y < / strong>(当我输入Y表示我不想打印带引号的文字)时,我收到了消息:回答&#39; Y& #39;是无效的。程序正在终止。以下是代码:

guides(colour = guide_legend(override.aes = list(shape = c(16, 17, NA))))

我做错了什么?

2 个答案:

答案 0 :(得分:1)

二元运算符&&的优先级高于|| 这意味着这一行:

answer == "Y" && marks != "Y" || marks != "N"

相当于

(answer == "Y" && marks != "Y") || marks != "N"

因此,只要marks"N"不同,语句就成立。

解决问题的方法是添加一堆括号。

answer == "Y" && (marks != "Y" || marks != "N")

答案 1 :(得分:0)

逻辑问题就在这一行:

elsif answer == "Y" && marks != "Y" || marks != "N" 

您的脚本现在正在寻找(answer ==&#34; Y&#34;&amp;&amp; marks!=&#34; Y&#34;)||标记!=&#34; N&#34;。它在得到或声明之前评估和声明,因为答案是&#34; N&#34;和标记是&#34; Y&#34; (回答==&#34; Y&#34;&amp;&amp; marks!=&#34; Y&#34;)评估为真。

您希望在或表达式周围加上括号,以便上面的行变为:

elsif answer == "Y" && (marks != "Y" || marks != "N")

并且程序应该按照您的想法运作。