红宝石中的简单计算器

时间:2015-05-01 10:43:36

标签: ruby string

我想在用户从键盘输入/输入"1"时添加两个数字,在用户按下"2"时减去,并在用户按下"3"时相乘。

def add(x,y)
  return x + y
end
def sub(x,y)
  return x - y
end
def multiply(x,y)
  return x * y
end

puts"Enter a First Number"
num1=gets.chomp

puts"Enter a Second Number"
num2=gets.chomp

puts"Press 1,2 or 3 from your keyboard"
choice=gets.chomp

if choice == "1"
  puts(num1,"+",num2, "=", add(num1,num2))
elsif choice == "2"
  puts(num1,"-",num2,"=",sub(num1,num2))
elsif choice == "3"
  puts(num1,"*",num2,"=",multiply(num1,num2))
else
  puts"Invalid Input/Choice"
end
gets

我的代码中有一些错误。当我按"1",时,我会像这样输入:

first number=2
second number=3

但结果是2 + 3 = 23,而实际应该是2 + 3 = 5。减法和乘法也有一些误差。如果,任何人都可以解决这个问题,那么我会很高兴。

2 个答案:

答案 0 :(得分:3)

@notulysses已经为您提供了正确的解决方案。我只想说明你是如何得到23

的结果的
 > "2" + "3" # as string
 => "23" 
 > "2".to_i + "3".to_i # convert string to integer
 => 5 

除了你的观点:

  

减法和乘法也有一些错误

因为减法和乘法不能对String执行。这就是你收到错误的原因:让我告诉你:

 > "2" - "3"
 # NoMethodError: undefined method `-' for "2":String
 > "2" * "3"
 # TypeError: no implicit conversion of String into Integer

如果使用to_i方法将用户输入从字符串转换为整数,您将获得正确的结果,并且您不会收到任何错误。 :)

答案 1 :(得分:1)

您应该应用.to_i将用户的输入转换为整数(gets.to_i),否则将它们视为字符串,并且在+运算符连接的情况下(在其他情况下)您应该收到有关undefined methodno implicit conversion of String into Integer)的错误。