无法找出红宝石数学错误。建议?

时间:2019-05-09 04:35:05

标签: ruby

乘法是唯一有效的运算符。其他所有运算符

由于某些原因仍然会相乘。例如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

2 个答案:

答案 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