我被困在决策过程中。当answer变量为N(当我键入N表示我不想在不同的行中打印文本)和marks变量为Y(当我键入Y时,表示我不想打印带引号的文本),我收到消息:答案'Y'是无效的。程序正在终止。这是代码:
def multiFunctionalPrinter
puts "How many times do you want to print?"
number = gets
puts "-------------------------------------------"
puts "What do you want to print?"
text = gets.chomp #chomping variable to format it for decision making
puts "-------------------------------------------"
puts "Do you want to print in different lines (Y or N)?"
answer = gets.chomp #chomping variable to format it for decision making
puts "-------------------------------------------"
puts "Do you want to add quotation marks (') (Y or N)?"
marks = gets.chomp #chomping variable to format it for decision making
if answer == "Y" && marks == "Y" # Different lines: ON , Quotation marks: ON
1.upto(number.to_i) {puts "'" + text.to_s + "'"}
elsif answer == "Y" && marks == "N" # Different lines: ON , Quotation marks: OFF
1.upto(number.to_i) {puts text.to_s}
elsif answer == "Y" && marks != "Y" || marks != "N" # Different lines: ON , Quotation marks: INVALID
puts "Answer '#{marks}' is invalid. Program is terminating."
elsif answer == "N" && marks == "Y" # Different lines: OFF , Quotation marks: ON
puts "Do you want to split what you print? (Y or N)"
answer2 = gets.chomp
if answer2 == "Y" # Split: ON
1.upto(number.to_i) {print "'" + text.to_s + "' "}
print "\n"
elsif answer2 == "N" # Split: OFF
1.upto(number.to_i) {print "'" + text.to_s + "'"}
else
puts "Answer '#{answer2}' is invalid. Program is terminating."
end
elsif answer == "N" && marks == "N" # Different lines: OFF , Quotation marks: OFF
puts "Do you want to split what you print? (Y or N)"
answer2 = gets.chomp
if answer2 == "Y" # Split: ON
1.upto(number.to_i) {print text.to_s + " "}
elsif answer2 == "N" # Split: OFF
1.upto(number.to_i) {print text.to_s}
else
puts "Answer '#{answer}' is invalid. Program is terminating."
end
else
puts "Answer '#{answer}' or '#{marks}' is invalid. Program is terminating."
end
puts "--------------------------------------------"
end
multiFunctionalPrinter
我在做什么错?
二进制运算符&&
的优先级高于||
。这意味着该行:
answer == "Y" && marks != "Y" || marks != "N"
相当于
(answer == "Y" && marks != "Y") || marks != "N"
因此,只要marks
与"N"
不同,该语句就成立。
您应该解决的问题是添加一堆括号。
answer == "Y" && (marks != "Y" || marks != "N")
逻辑问题在此行上:
elsif answer == "Y" && marks != "Y" || marks != "N"
您的脚本希望立即查看(答案==“ Y” &&标记!=“ Y”)||标记!=“ N”。它在到达and语句之前先评估and语句,并且因为答案为“ N”且标记为“ Y”(答案==“ Y” &&标记!=“ Y”)的结果为true。
您想在or表达式两边加上括号,因此上一行将变为:
elsif answer == "Y" && (marks != "Y" || marks != "N")
并且程序应该按照您的想法工作。