ユーザー入力を受け取る電卓を作成しようとしています。この入力には数値だけでなく、演算子も含めてください(+
、-
、*
、/
)。私は与えられたパラメータで動作するメソッドを作成しました。ここに私のコードは:演算子をユーザー入力として受け取る電卓
def calculator(x, y, z)
if y == '+'
ans = x + z
elsif y == '-'
ans = x - z
elsif y == '*'
ans = x * z
elsif y == '/'
ans = x/z
end
p ans
end
calculator(3, '+', 5)
calculator(4, '-', 2)
calculator(3, '*', 10)
calculator(21, '/', 7)
puts "Please enter your calculation"
user_calc = gets.chomp
user_calc.chars
user_calc[0].to_i
user_calc[4].to_i
calculator(user_calc[0], user_calc[2], user_calc[4])
プログラムは、インデックス0
は最初の整数インデックス2
オペレータ、及び指標4
第2の整数であることを前提としています。
3 + 5
を入力すると、出力は8
の代わりに35
になります。それ以外の操作(-
,*
,/
)はnil
を返します。ユーザー入力を使用しようとすると、エラーが発生します。私は、配列内のすべてを文字列として扱うと思います。指定されたパラメータは意図したとおりに動作します。しかし、私はユーザーの入力を徹底的に把握することはできません。
私はこれを修正する方法について考えています。
ありがとう、アマダン。なぜ今私は正しい返品を得ていないのか分かります。 私はもう少し考えてきましたが、私は解決しようとしているもう一つの質問がありました。各入力(x、y、z)を独自のインデックスとして扱う方法はありますか? 現時点では、 user_calc.split( '') の各文字は、それ自身のインデックスとして扱われます。たとえば、5 + 95は代わりに5 + 9を返します。私はuser_calcをどうやって別々に分けることができるのだろうと思っています。 言い換えれば、14の代わりに5 + 95に対して100の戻り値を得るにはどうすればよいでしょうか。 – Orie
キースが言ったように、正規表現。 \ s *(\ d +)/) 'は、2つの整数引数を抽出します。 (文字列として、それらの間に 'to_i ')とそれらの間の演算子が必要です。 – Amadan