- ベストアンサー
簡易電卓の問題がわかりません!
簡易電卓のプログラミングについてご教授お願いしたく投稿いたしました。ほぼ合っていると思うのですが、実行できません。一番下の・・・の部分のプログラミングを教えてください!よろしくお願いいたします! import java.io.*; class TestCalc{ public static void main(String[] arg) { BufferedReader input= new BufferedReader(new InputStreamReader(System.in)); Calc calc=new Calc(); try{ String line; System.out.print("==> "); while((line=input.readLine())!=null){ int x=calc.process(line); System.out.println(x); System.out.print("==> "); } }catch(IOException e){ } } } //この後、Calcクラスの定義 class Calc{ private IntStack st; Calc(){ st=new IntStack(); } int process(String s) { if (s.equals("+")) { int n=st.pop()+st.pop(); st.push(n); return n; } else if (s.equals("-")) { } else if (s.equals("*")) { } else if (s.equals("/")) { } else { int n=Integer.parseInt(s); st.push(n); return n; } } } class IntStack{ ... }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
私の場合の答えは 1.最初にpush()される。i[0] j←1 2.二つ目のデータをpush()される。i[1] j←2 3.例えば"+"が入力されたとき最初にpop()で得たデータと二回目にpop()されたデータ同士が加算され(i[0]+i[1]) push(n)されると同時に表示される。 class IntStack{ private int[] i=new int[3]; private int j=0; void push(int n){ i[j]=n; j=j+1; } int pop(){ j=j-1; return i[j]; } }
その他の回答 (4)
Last In First Outについては参考URLに簡単な説明があります. fortranxpさんのIntStackクラスを少し変更すれば実現できますね. class IntStack { private int[] i = new int[2]; private int k = 0; void push(int n) { (追加処理) } int pop() { (取り出し処理) } }
お礼
お返事どうもありがとうございます!fortranxpさんのInStackクラスをどう変更すればよいのかわかりません。。。追加処理と取り出し処理のところとか。。。すみませんが、よろしくお願いします!
- fortranxp
- ベストアンサー率26% (181/684)
なんかよく判りませんが 1.push(n) ではnを保存する。 2.pop() nをreturnする。 class IntStack { private int i[]=new int[3]; private int k; void push(int n){ k=k+1; i[k]=n; } int pop(){ k=k-1; return i[k]; } } みたいな。でもうまくできない。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
わざわざクラスを作らなくても private Stack<Integer> st; でいいんじゃないの?
お礼
お返事ありがとうございます。private Stack<Integer> st;は授業で習ってないので、使いこなせないです。。。すいません、クラスを作る方法のほうでご教授お願いします。
Last In First Outを実現する.
お礼
お返事どうもありがとうございます。Last In First Outを実現するとはどのような意味でしょうか?
お礼
ありがとうございました!とても参考になりました!