stackmachineの作り途中なのですがこれを実行すると
後置記法で数式を入力してください。空白を開けながら
1 2 + 3 *
true
1をstackに格納しました
true
2をstackに格納しました
true
2と1を取り出して加算し3をstackに格納しました
true
3をstackに格納しました
true
3と3を取り出して掛け算し9をstackに格納しました
となりカーソルが点滅して何かの処理を待っている状況です.
whileループがうまく抜け出せていないのでしょうか.
そのせいかSatckクラスの最後のSystem.out.println(deque.pop())が表示されません.原因がわからないです.
import java.util.Scanner; public class Main{ public static void main(String[] args){ System.out.println("後置記法で数式を入力してください。空白を開けながら"); Scanner formula = new Scanner(System.in); Stack sm = new Stack(); sm.calculate(formula); } } ```****
import java.util.Deque;
import java.util.ArrayDeque;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Stack{
private final static String add = "+";
private final static String sub = "-";
private final static String mul = "*";
private final static String div = "/";
public boolean isNumber(String num){ try{ Integer.parseInt(num); return true; }catch(NumberFormatException e){ return false; } } public void calculate(Scanner formula){ Deque<Integer> deque = new ArrayDeque<Integer>(); while(formula.hasNext()){ System.out.println(formula.hasNext()); String str = formula.next(); if(isNumber(str)){ deque.push(Integer.parseInt(str)); System.out.println(str+"をstackに格納しました"); } else if(str.equals(this.add)){ int lastOut = deque.pop(); int firstOut = deque.pop(); deque.push(lastOut+firstOut); System.out.println(lastOut+"と"+firstOut+"を取り出して加算し"+deque.peek()+"をstackに格納しました"); } else if(str.equals(this.sub)){ int lastOut = deque.pop(); int firstOut = deque.pop(); deque.push(lastOut-firstOut); } else if(str.equals(this.mul)){ int lastOut = deque.pop(); int firstOut = deque.pop(); deque.push(lastOut*firstOut); System.out.println(lastOut+"と"+firstOut+"を取り出して掛け算し"+deque.peek()+"をstackに格納しました"); } else if(str.equals(this.div)){ int lastOut = deque.pop(); int firstOut = deque.pop(); deque.push(lastOut/firstOut); } } System.out.println(deque.pop()); }
}
``
回答4件
あなたの回答
tips
プレビュー