※Keisanクラスの内容を最下層に追記しました。
まだ中身は適当です;
javaで電卓のプログラムを作成しています。
実行まで一応動作する状態です・・・
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Dentaku {
public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String now = "0"; String enzan = ""; String input = ""; String msg = "数値"; // 無限ループのどこかでkeisanクラス呼び出し予定 while(true){ System.out.println("現在の値:" + now); System.out.println("演算子:" + enzan); System.out.println("入力された値:" + input); System.out.print(msg + "を入力してください >>"); String data = br.readLine(); System.out.println(""); // eを入力されたらループ終わり if ("e".equals(data)) { System.exit(0); } // cを入力で起動時の状態へ if ("c".equals(data)) { now = "0"; enzan = ""; input = ""; msg = "数値"; } if ("=".equals(data)) { /*現在の値:○ ←に計算結果を入れたい*/ } if ("ce".equals(data)) { /*直前の入力をクリア*/ } try { if ("数値".equals(msg)) { now = data; msg = "演算子"; } else if ("演算子".equals(msg)) { enzan = parseEnzan(data); msg = "数値又は演算子"; } else { if (is_Enzan(data)) { enzan = parseEnzan(data); } else { now = data; } msg = "数値又は演算子"; } } catch(Exception e) { System.out.println("エラー: " + msg + "ではありません"); } } } // str が演算子かチェック static boolean is_Enzan(String str) { if ((str.length() != 1) || ("+-*/".indexOf(str) == -1)) { return false; } return true; } // 演算子じゃなければ例外発生 static String parseEnzan(String str) throws IllegalArgumentException { if (is_Enzan(str) == false) { throw new IllegalArgumentException("演算子でありません。"); } return str; }
}
実際に四則演算を行うのは別のクラスに分けようと思っています。
分からないことだらけなのですが、今回まずお尋ねしたいのは、
①四則演算するKeisanクラスをソース内のどこに挿入すべきか?
(”=”が入力されたら現在の値:nowが変動するのでそこと絡めるべきか?と考えています)
②ceを入れると一つ前の入力画面に戻したいのですが、どうすればそのような操作が出来るのか?
よろしくお願いいたします。
四則演算の結果を戻り値で返すようにしたい予定です。
クラスを分けたい理由は、そのほうが見やすいかと思ったからです。
import java.math.BigDecimal;
public class Keisan{
BigDecimal one = new BigDecimal(); BigDecimal two = new BigDecimal(); public BigDecimal add() { BigDecimal add = one.add(two); return add; } public BigDecimal subtract() { BigDecimal subtract = one.subtract(two); return subtract; } public BigDecimal multiply() { BigDecimal multiply = one.multiply(two); return multiply; } public BigDecimal divide() { BigDecimal divide = one.divide(two, 20, BigDecimal.ROUND_HALF_UP); return divide; }
}
回答2件
あなたの回答
tips
プレビュー