出来るだけ寝ていたい

1日最低12時間睡眠、寝たら負け

課題2 チャレンジ

授業で出たやつ。電卓。計算の仕組みよりメモリの使い方を考える。
テンプレートのスタックというデータ構造を使うと楽。

package kadai1.prog1.main;

import java.util.Scanner;
import java.util.Stack;

public class Prog001 {

    public static void main(String[] args){
        Stack st=new Stack();
        Scanner stdIn= new Scanner(System.in);
        System.out.println("オペランドを1つだけ入力してください。");
        double s=stdIn.nextDouble();
        st.push(s);
        boolean i=true;
        while(i){
            System.out.println("演算子を入力してください。計算結果を出すときは「=」と入力してください。");
            String t=stdIn.next();

        if(t.equals("+")){
            System.out.println("もう1つオペランドを入力してください。");
            double n=stdIn.nextDouble();
            st.push(n);
            double a=((Double)st.pop()).doubleValue();
            double b=((Double)st.pop()).doubleValue();
            st.push(a+b);
        }else if(t.equals("-")){
            System.out.println("もう1つオペランドを入力してください。");
            double n=stdIn.nextDouble();
            st.push(n);
            double b=((Double)st.pop()).doubleValue();
            double a=((Double)st.pop()).doubleValue();
            st.push(a-b);
        }else if(t.equals("*")){
            System.out.println("もう1つオペランドを入力してください。");
            double n=stdIn.nextDouble();
            st.push(n);
            double a=((Double)st.pop()).doubleValue();
            double b=((Double)st.pop()).doubleValue();
            st.push(a*b);
        }else if(t.equals("/")){
            System.out.println("もう1つオペランドを入力してください。");
            double n=stdIn.nextDouble();
            st.push(n);
            double b=((Double)st.pop()).doubleValue();
            double a=((Double)st.pop()).doubleValue();
            st.push(a/b);
        }else if(t.equals("=")){
            System.out.println("計算結果は" + st.pop() + "です。");
            break;
        }else {
            System.out.println("エラー");
            break;
        }
        }
    }
}

まあ、こんな感じで。基本的には電卓は一般的な数式の計算とは違って逆ポーランド記法を使っている事を念頭に置いておくとやりやすいかも。