前提・実現したいこと
逆ポーランド法を用いたプログラムを勉強中なのですが計算式を入力後エラーが出てしまいます。エラーが出ないようにするにはどうすれば良いでしょうか?
発生している問題・エラーメッセージ
計算式を入力してください 12+4*3+ Exception in thread "main" java.lang.NumberFormatException: For input string: "12+4*3+" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:652) at java.base/java.lang.Integer.parseInt(Integer.java:770) at ex10.stackRPN.main(stackRPN.java:46)
該当のソースコード
java
1package ex10; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.util.Stack; 7 8public class stackRPN { 9 10 public static void main(String args[]) throws IOException { 11 System.out.println("計算式を入力してください"); 12 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 13 String[] stringArray = br.readLine().split(""); 14 15 // 後に入れたものを先に抜き出す 16 Stack<Integer> que = new Stack<Integer>(); 17 int a = 0; 18 int b = 0; 19 for (int i = 0; i < stringArray.length; i++) { 20 if (stringArray[i].equals("+")) { 21 a = que.pop(); 22 b = que.pop(); 23 que.add(b + a); 24 continue; 25 } 26 if (stringArray[i].equals("-")) { 27 a = que.pop(); 28 b = que.pop(); 29 que.add(b - a); 30 continue; 31 } 32 if (stringArray[i].equals("*")) { 33 a = que.pop(); 34 b = que.pop(); 35 que.add(b * a); 36 continue; 37 } 38 if (stringArray[i].equals("/")) { 39 a = que.pop(); 40 b = que.pop(); 41 que.add(b / a); 42 continue; 43 } 44 // 演算子以外はstackに登録する 45 que.push(Integer.parseInt(stringArray[i])); 46 } 47 System.out.println("計算式"+br); 48 System.out.println(que.pop()); 49 } 50 51} 52 53
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 05:51
2019/12/17 06:11 編集
2019/12/17 06:31
2019/12/17 06:39 編集
2019/12/17 06:38
2019/12/17 06:41
2019/12/17 06:42
2019/12/17 06:44
2019/12/17 06:48 編集
2019/12/17 06:47
2019/12/17 06:55