質問: 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); } } ___________________ 1if ("c".equals(data)) { で最初の表示画面にしたいが、現状だとnow:cとなってしまい上手くいかない。 2nowに文字を入れても動作してしまう(aadcなどでも通ってしまう)が、数字でなければエラーを出したい。 以上二点をどうすればよいか教えてください。 よろしくお願いいたします。
回答: 前回の質問を探すためにプロフィールをみたところ勉強中ということで、単純に質問の内容だけを答えさせてもらいます。(あえて、他の部分には口をだしません) > > 1if ("c".equals(data)) { > > で最初の表示画面にしたいが、現状だとnow:cとなってしまい上手くいかない。 > > > これに関しては単純です。 各if文が別れてしまっているからです。 ``` if ("e".equals(data)) { //略 }else if ("c".equals(data)) { //略 }else if ("=".equals(data)) { //略 }else if ("ce".equals(data)) { //略 }else{ 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 + "ではありません"); } } ``` というようにelseをつかって"C"が入力された時には処理が行われないようにしましょう。 現状ではelseがないためmsgが"数字"のに設定されたままtryの中にある条件式に処理が行くようになっています。 > > 2nowに文字を入れても動作してしまう(aadcなどでも通ってしまう)が、数字でなければエラーを出したい。 > > > nowに文字を入れても・・とありますが、条件式("数値".equals(msg))の時にnow=dataとしています。 単純に回答をするとその条件の時にdataが数字がどうか判定すればよいです。 ``` if("数値".equals(msg)){ if(/*dataが数字かどうかの判定*/){ now=data; msg="演算子" }else{ //数字じゃなかった場合の処理 } } ``` 数字かどうかの判定はteratailを探せば幾つか出てくるみたいなので勉強してみてください。 いくつか方法はあります。 余談ですが ``` "+-*/".indexOf(str) == -1 ``` この文は「あ、なるほど・・・」と思ったやり方です。 私はすぐにPattern等を使って判定を始めてしまうため頭が固くなっているなぁと感心しました。 勉強頑張ってください。