
Javaで電卓を作っています。
https://ideone.com/mquzPm
10+20=30、12-2=10、2*10=20、6/3=2など、1回の計算はできるのですが、連続した計算をすると、2+3*6=18のようになってしまいます。
連続した計算をするにはどこをどのように変えれば良いでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
№1さんと№2さんが回答してますので概ねそれでいいと思います。
問題は、2+3*6=いくつにしたいかです。
電卓では、30になりますよね。
これは(2+3)*6だからです。
一方、算数的には、掛け算優先ですから20が正しいです。
よって、式全体が入力し終わらないと優先順序が決まらないという問題があります。
なかなか手ごわいですね。
頑張ってください。
No.2
- 回答日時:
関数電卓ではなく、通常電卓のように演算順の考慮が必要ないのなら、
ボタン "+ - * /" の処理前に
すでに op が存在するなら
ボタン "=" と同じ処理をしましょう
No.1
- 回答日時:
① イコールが押されるまで、ひたすら文字列を記録する。
② 記録した文字列のうち、()があるか無いか。あるなら()が幾つあるかを判定して、優先して計算すべき部分を判断する。
③ 優先して判断すべき部分の中から、演算子を識別して、優先して計算すべき部分を先に計算する。
④ 計算結果を置換して新たな数式とする。
⑤ この①から④を、文字が無くなって単一の数字になるまで繰り返し計算する。
このうち②の部分は難しいかもしれないから後で実装したら良い。
例
① 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週目
ループ終了
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
変化させるセルが変化しない
-
べき乗の計算が遅い理由
-
大規模疎行列の高速な計算方法...
-
ExcelのVBAで複素数は扱えない...
-
C言語 log実装
-
RSA暗号解読
-
入射角反射角
-
EXCELなどで「返す」という表現
-
Matlabでのinverse(逆関数)の...
-
情報処理 ポインタ渡しによる...
-
Matlabでのニュートン法について
-
正しい五十音順について
-
ファイルの開き方
-
マージソートの比較回数の計算...
-
VBAで仕様書は書きますか?
-
C++ で、「)」が必要 というエ...
-
XnViewにwebpを「いつも開く」...
-
C言語(gcc), Linux, FTPプログ...
-
C++でアボート(Abort)で処理が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
VBAで関数をつくる
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
C言語についての質問です。 ル...
-
切り上げたい
-
DLL(VC++で作った)で稼動中の...
-
CとFORTRANの計算速度はどちら...
-
趣味で「乗換案内」みたいなソ...
-
CGIの実行権限(ディスク容...
-
エクセルで特定のセルのみを任...
-
functionを含んだプログラムを...
-
時間差を求める
おすすめ情報