プロが教えるわが家の防犯対策術!

Javaで電卓を作っています。

https://ideone.com/mquzPm

10+20=30、12-2=10、2*10=20、6/3=2など、1回の計算はできるのですが、連続した計算をすると、2+3*6=18のようになってしまいます。
連続した計算をするにはどこをどのように変えれば良いでしょうか。

A 回答 (3件)

№1さんと№2さんが回答してますので概ねそれでいいと思います。


問題は、2+3*6=いくつにしたいかです。
電卓では、30になりますよね。
これは(2+3)*6だからです。
一方、算数的には、掛け算優先ですから20が正しいです。
よって、式全体が入力し終わらないと優先順序が決まらないという問題があります。
なかなか手ごわいですね。
頑張ってください。
    • good
    • 0

関数電卓ではなく、通常電卓のように演算順の考慮が必要ないのなら、



ボタン "+ - * /" の処理前に
すでに op が存在するなら
ボタン "=" と同じ処理をしましょう
    • good
    • 0

① イコールが押されるまで、ひたすら文字列を記録する。



② 記録した文字列のうち、()があるか無いか。あるなら()が幾つあるかを判定して、優先して計算すべき部分を判断する。

③ 優先して判断すべき部分の中から、演算子を識別して、優先して計算すべき部分を先に計算する。

④ 計算結果を置換して新たな数式とする。

⑤ この①から④を、文字が無くなって単一の数字になるまで繰り返し計算する。

このうち②の部分は難しいかもしれないから後で実装したら良い。



① 2 + 3 * 6 / 2 - 2 * 1
② で()無し
③ で掛け算記号あり ⇒ 優先計算
④ 掛け算記号の前後の数字は 3 と 6。掛け算をして 18

2週目
① 2 + 18 / 2 - 2 * 1
② で()無し
③ で割り算記号あり ⇒ 優先計算
④ 2 + 9 - 2 * 1

3週目
① 2 + 9 - 2 * 1
④ 2 + 9 - 2

4週目
① 2 + 9 - 2
④ 11 - 2

5週目
① 11 - 2
② 9

6週目
ループ終了
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!