前回から少しだけ前進しましたが、まだ壁にぶつかっているのでご助力お願いいたします。
表記イメージとしては、実行するとまずは下記が表示されます。
C\JAVA>java Dentaku
現在の値:0
演算子:
入力された値:
数値を入力してください >>
実際に入力開始後のイメージ↓
現在の値:0
演算子:
入力された値:
数値を入力してください >>1
↓
現在の値:1
演算子:
入力された値:
演算子を入力してください >>+
↓
現在の値:1
演算子:+
入力された値:
数値又は演算子を入力してください >>60
↓
現在の値:1
演算子:+
入力された値:60
数値又は演算子を入力してください >>
"E"が入力されるまでずっとループ。
現在出来ているコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
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 = "数値"; 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)) { break; } // cを入力で起動時の状態へ if ("c".equals(data)) { now = "0"; enzan = ""; input = ""; msg = "数値"; data = ""; } if ("=".equals(data)) { if ("+".equals(enzan)){ BigDecimal bd1 = add(now, input); now = bd1.toString(); } else if ("-".equals(enzan)){ BigDecimal bd2 = subtract(now, input); now = bd2.toString(); } else if ("*".equals(enzan)){ BigDecimal bd3 = multiply(now, input); now = bd3.toString(); } else if ("/".equals(enzan)){ try { BigDecimal bd4 = divide(now, input); now = bd4.toString(); } catch (ArithmeticException e) { System.out.println("0で割ることは出来ません"); } } enzan =""; 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 { input = 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; } // str が演算子でなければ、例外発生 static String parseEnzan(String str) throws IllegalArgumentException { if (is_Enzan(str) == false) { throw new IllegalArgumentException("演算子でありません。"); } return str; } static BigDecimal add(String num1, String num2){ return new BigDecimal(num1).add(new BigDecimal(num2)); } static BigDecimal subtract(String num1, String num2){ return new BigDecimal(num1).subtract(new BigDecimal(num2)); } static BigDecimal multiply(String num1, String num2){ return new BigDecimal(num1).multiply(new BigDecimal(num2)); } static BigDecimal divide(String num1, String num2){ return new BigDecimal(num1).divide((new BigDecimal(num2)), 20, BigDecimal.ROUND_HALF_UP); }
}
___________________
①if ("c".equals(data)) {
で最初の表示画面にしたいが、現状だとnow:cとなってしまい上手くいかない。
②nowに文字を入れても動作してしまう(aadcなどでも通ってしまう)が、数字でなければエラーを出したい。
以上二点をどうすればよいか教えてください。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/12 15:19