乘法是唯一有效的运算符。其他所有运算符
由于某些原因仍然会相乘。例如5 + 5 = 25、6-2 = 12、6 / 2 = 12。
看起来我所有的运算符在代码中都是正确的,所以我是
不太清楚为什么会这样。
puts "Enter your first Number: "
first_num = gets.to_i
puts "Enter your modifier"
modifier = gets
puts "Enter second number"
second_num = gets.to_i
def add(first_num, second_num)
return first_num + second_num
end
def subtract(first_num, second_num)
return first_num - second_num
end
def multiply(first_num, second_num)
return first_num * second_num
end
def divide(first_num, second_num)
return first_num / second_num
end
case modifier
when +
final_num = add(first_num, second_num)
when -
final_num = subtract(first_num, second_num)
when *
final_num = multiply(first_num, second_num)
when %
final_num = divide(first_num, second_num)
end
puts final_num
答案 0 :(得分:3)
gets
返回字符串。更具体地说,gets
返回用户输入的字符串,包括当用户按下ENTER时附加的换行符。
因此,首先使用gets.chomp
从用户输入中删除新行是有意义的。其次,将modifier
与包含case
块中的运算符的字符串进行比较:
puts "Enter your modifier"
modifier = gets.chomp
# ...
case modifier
when '+'
final_num = add(first_num, second_num)
when '-'
final_num = subtract(first_num, second_num)
when '*'
final_num = multiply(first_num, second_num)
when '%'
final_num = divide(first_num, second_num)
end
或者使用散列和case
插入send
块的重构版本:
OPS = { '+' => 'add', '-' => 'substract', '*' => 'multiply', '%' => 'divide' }
final_num = send(OPS[modifier], first_num, second_num)
实际上,我很惊讶Ruby不会引发语法错误。
答案 1 :(得分:0)
在case语句中将" "
放在operators
周围。因此当"+"
等.gets时的case修饰符会将内容另存为string
,因此您的修饰符另存为string
。