红宝石中的计算器程序,采取" 2 + 3"并给出输出6,超过2位数的问题

时间:2015-10-24 14:02:24

标签: ruby

第一篇文章,请原谅我是否打破任何礼仪。我开始了,所以这可能很简单。

尝试使用ruby,一个计算器进行编码,用户输入算术语句(只有二进制文件,PEMDAS / BIDMAS将在以后执行),答案就出来了。

这是我的代码,仅适用于单位数字。

class Calculator

  def initializer (a,b)
    @a = a,
    @b = b
  end

  def add(a, b)
      a+b
  end

  def subtract(a, b)
    a-b
  end

  def multiply(a,b)
    a*b
  end

  def divide (a,b)
    a/b
  end

  def powers (a,b)
    a**b
  end

 end

puts "Enter an expression to be evaluated"
a = gets.chomp.gsub(/\s+/, "") 

puts case a[1]

when "+"
    "#{a[0]} + #{a[2]} = #{Calculator.new.add(a[0].to_f,a[2].to_f)}"
when "-"
    "#{a[0]} - #{a[2]} = #{Calculator.new.subtract(a[0].to_f,a[2].to_f)}"
when "*" || "x" || "X"
    "#{a[0]} x #{a[2]} = #{Calculator.new.multiply(a[0].to_f,a[2].to_f)}"
when "/"
    "#{a[0]} / #{a[2]} = #{Calculator.new.divide(a[0].to_f,a[2].to_f)}"
when "^"
    "#{a[0]} to the power #{a[2]} = #Calculator.new.powers(a[0].to_f,a[2].to_f)}"
else
    "Not valid"
end

我正在考虑分割像#34; 234 + 342" (234和342可以是任何大小的长度数字)成阵列,例如[" 234"," +"," 342"]。

但我被困在如何做到这一点???还是有另一种方式吗?

帮助将受到赞赏,只是个人挑战。

由于

1 个答案:

答案 0 :(得分:1)

正如您已经意识到问题在于您通过输入字符串进行操作的方式。

最简单的方法是向用户询问两个号码,然后让他们输入所需的操作。类似的东西:

puts "Enter first number"
a = gets.chomp
puts "Enter second number"
b = gets.chomp
puts "Enter required operation [+, -, *, /]"
c = gets.chomp

你也可以一次性完成这一切,就像你已经尝试过的那样,但是我会反对它,因为你永远不知道用户会输入什么。例如:

puts "Enter an expression to be evaluated"
a = gets.chomp # user enters: 123 + 457
# => "123 + 457"

现在提取数字:

numbers = a.scan(/\d+/)
#=> ["123", "457"]
operator = a[/\W+/]
#=> " + "

然后你可以继续你的开关案例。