• ベストアンサー

簡易電卓の問題がわかりません!

簡易電卓のプログラミングについてご教授お願いしたく投稿いたしました。ほぼ合っていると思うのですが、実行できません。一番下の・・・の部分のプログラミングを教えてください!よろしくお願いいたします! 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{ ... }

質問者が選んだベストアンサー

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.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];  }      }

vince_macmahon
質問者

お礼

ありがとうございました!とても参考になりました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#15808
noname#15808
回答No.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() { (取り出し処理) } }

参考URL:
http://e-words.jp/w/LIFO.html
vince_macmahon
質問者

お礼

お返事どうもありがとうございます!fortranxpさんのInStackクラスをどう変更すればよいのかわかりません。。。追加処理と取り出し処理のところとか。。。すみませんが、よろしくお願いします!

全文を見る
すると、全ての回答が全文表示されます。
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

なんかよく判りませんが 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)
回答No.2

わざわざクラスを作らなくても private Stack<Integer> st; でいいんじゃないの?

vince_macmahon
質問者

お礼

お返事ありがとうございます。private Stack<Integer> st;は授業で習ってないので、使いこなせないです。。。すいません、クラスを作る方法のほうでご教授お願いします。

全文を見る
すると、全ての回答が全文表示されます。
noname#15808
noname#15808
回答No.1

Last In First Outを実現する.

vince_macmahon
質問者

お礼

お返事どうもありがとうございます。Last In First Outを実現するとはどのような意味でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 現在学校のjavaの課題電卓を作っています

    import java.io.*; class dentaku { public static void main(String[] args)throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); System.out.print("式を入力"); String input = r.readLine(); String sum[] = new String[input.length()]; String number = ""; int s = 0; int goukei =0; char enzan = ' '; for(int i=0; i < input.length(); i++) { //System.out.print(str[i]); //文字列から1文字ずつ抽出 char num = input.charAt(i); if(i == input.length()-1) { sum[s] = number; } else { if(num == '+' || num == '-'|| num == '*'|| num == '/') { //配列sumに代入 sum[s] = number; s++; sum[s] = String.valueOf(num); s++; } else { //変数numberにnumを代入 number = number + num; } } } for(int j=0; j<sum.length; j++) { if(sum[j] == null) { break; } if(j == 0) { goukei = Integer.parseInt(sum[j]); } else { if(sum[j].equals("+") || sum[j].equals("-")|| sum[j].equals("*")|| sum[j].equals("/")) { enzan = sum[j].charAt(0); } else { switch(enzan) { case '+': goukei += Integer.parseInt(sum[j]); break; case '-': goukei -= Integer.parseInt(sum[j]); break; case '*': goukei *= Integer.parseInt(sum[j]); break; case '/': goukei /= Integer.parseInt(sum[j]); break; } } } } System.out.print(goukei); } } までできたのですが 実行し 実際に 1+1+1とうってみると答えが23になってしまいます。 どのようにしたらいいのでしょうか

    • ベストアンサー
    • Java
  • javaについて

    キーボードから入力をして、その後str[0][0]とstr[1][0]の文字を繋げたいのですがエラーとなってしまいます。どう変えたらよいでしょうか。 以下がプログラムです。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu3 { public static void main(String[] args) throws IOException { int KEYWORDMAX=10; int CNTMAX=100; String [][]str = new String[KEYWORDMAX][CNTMAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line=null; for (int i=0;i<KEYWORDMAX;i++){ System.out.println("第"+(i+1)+"番目のキーワードを設定しますか?(y/n)"); line=br.readLine(); if(line.equals("n")) break; for (int s=0;s<CNTMAX;s++){ System.out.println("キーワードを入力してください(終了=0)"); line=br.readLine(); if(line.equals("0"))break; str[s][i]=line; } } String keyword = new String(str[0][0]" "str[1][0]); System.out.println("キーワードは "+keyword); } } 以下はエラー表示です。 gugu3.java:24: ')' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: 文ではありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ gugu3.java:24: ';' がありません。 String keyword = new String(str[0][0]" "str[1][0]); ^ エラー 3 個

    • ベストアンサー
    • Java
  • プログラミング学習paizaの数の並び替え問題

    Eclipseでは上手く並び替え表示されるのですが、paizaで同じコードを提出しても、提出前動作確認でコード実行結果がWrong Anserでエラーになります。原因が分かりません。使用言語はJavaです。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); ArrayList<Integer> n_ = new ArrayList<>(); n_.add(null); while (line != null) { if (line.equals("")) { for (int a = 1; a< n_.size()-1; a++) { for (int j = a + 1; j < n_.size(); j++) { if (n_.get(a) > n_.get(j)) { int w = n_.get(a); n_.set(a, n_.get(j)); n_.set(j, w); } } } for (int k = 1; k < n_.size(); k++) { System.out.println(n_.get(k)); } break; }else{ int i = Integer.parseInt(line); n_.add(i); line = br.readLine(); } } } }

  • Vectorを用いた問題

    JAVAをはじめたばかりなのですが、以下の問題が分かりません。 Lessonクラス内のaddメソッドにおいてaddした結果が常に学籍番号の小さい順にソートしたいのですが、どうもVectorの使い方がわからず四苦八苦しております。 import java.util.Vector; class main { public static void main(String argv[]){ Lesson l = new Lesson("Kokugo","Tanaka",100); l.add(new Student("00005","Suzuki",100)); l.add(new Student("00002","Sato",64)); l.add(new Student("00003","Ito",43)); l.add(new Student("00007","Endo",92)); l.print(); } } class Lesson { private String name; // 課題名 private String teacher; // 担当者 private int max; // 最大履修者数 private int num; // 登録履修者数 Vector<Student> st; // Student class の配列 public Lesson(String l,String t,int n){ name=l; teacher=t; max=n; num=0; st=new Vector<Student>();// 配列の確保 } public boolean add(Student s){ if(num>=max){ return false;} else { if(num==0){st.insertElementAt(s,num++);} else{ for(int i=0;i<num;i++){ String p=(st.elementAt(i)).id; if(p.compareTo(s.id)>=0){ st.insertElementAt(s,i); } } } return true;} } public void print() { System.out.println("Lesson :"+name); System.out.println("Teacher :"+teacher); System.out.println("students:"+num); for(int i=0;i<num;i++){ st.elementAt(i).print_short(); } System.out.println(); System.out.println("----------"); } } class Student{ public String id; // 学籍番号 private String name; // 名前 private int grade; // 成績 Student(String i,String n, int g){ id=i; name=n; if(g<0)grade=0; else if (g>100) grade=100; else grade=g; } public void print_short() { System.out.println(id+","+name+","+grade); } } 実行結果 Lesson :Kokugo Teacher :Tanaka students:1 00002,Sato,64 ---------- 学籍番号の順にソートしたいのですが、どうやら学籍番号の一番小さいものしか表示されていないようです。どのようにしたらよいのか教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • if文を使った問題について

    次の問題について・・・ 問題: (1)String型の変数を2個作成し、それぞれに自分の名前と年齢を設定する。 (2)標準入力を行う。 (3)標準入力された値が「name」だった場合は名前の入力されている変数の値を表示する。 (4)標準入力された値が「age」だった場合は年齢の入力されている変数の値を表示する。 (5)標準入力された値が「name」と「age」以外だった場合は「わかりません」と表示する。 出力結果: C:\>java NameAge name 岩田 C:\>java NameAge age 27 C:\>java NameAge ?? わかりません 解答例: import java.io.*; class NameAge{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String hoge = br.readLine(); if(hoge.equals("name")){ System.out.println("岩田"); }else if(hoge.equals("age")){ System.out.println("27"); }else{ System.out.println("わかりません"); } } } ************************************************************ 上記の解答例以外に記述方法ってないのでしょうか? 自分は最初switch文を使って出来ると思い、 import java.io.*; class NameAge{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); switch(str){ case "name": System.out.println("岩田"); break; case "age": System.out.println("27"); break; default: System.out.println("わかりません"); break; } } } というふうに記述してみたのですが、 NameAge.java:13:互換性のない型 検出値 : java.lang.String 期待値 : int switch(str){ とエラーが出てしまいました。 恐らくstrの変数をここで使おうとしたことがいけないの だろうと解釈したのですが、 この質問の場合switch文での記述方法というのは無いですか? やはりequals()メソッドを使ってif文で記述するしかない のでしょうか?

    • ベストアンサー
    • Java
  • java 電卓のプログラム

    或る程度まで進みましたが、 ソースコードが分からず困っています;; こんな問題なのですが・・・ 課題1 以下の要件を満たす電卓のプログラム Calculatorクラスを作成し、ソースコードを 示せ。 1.最初に標準入力から文字を1文字入力し 計算の種類や動作を決定する。 必要な入力文字と動作の種類の対応を下記に示す。 入力文字  動作   +    数値a,bを受け取りa+bの結果を表示する   -    数値a,bを受け取りa-bの結果を表示する   *    数値a,bを受け取りa*bの結果を表示する   /   数値a,bを受け取りa/bの結果を表示する       ただし、b=0の時は「Infinity」と表示する   !    数値aを受け取りaの階乗を計算し表示する   q   終了する 2. 計算の種類が決定した後、標準入力から計算に必要な数字を入力する 3.計算が終了した後、再度、標準入力からの動作の 種類を受け付ける。 こんな感じです。 で、一応ここまで進んでいます。 import java.io.*; public class Calculator { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); int i = 0; int answer = 1; System.out.println("+、-、*、/、!、qから選んで入力してください"); String s = buf.readLine(); System.out.println("数字を二つ入力してください"); int a = Integer.parseInt(buf.readLine()); int b = Integer.parseInt(buf.readLine()); if (s.equals("+")) { System.out.println(a + b); } if (s.equals("-")) { System.out.println(a - b); } if (s.equals("*")) { System.out.println(a * b); } if (s.equals("/")) { System.out.println(a / b); } if (s.equals("!")) { System.out.println("階乗の計算をします。数字を一つ入力してください"); while (i < a) { i++; answer = i * answer; System.out.println("a!=" + answer); } } if (s.equals("q")) { //終了する処理 } } } とりあえず、自分でなんとか・・・。 後、残ったのは割り算で bに0が入力された時にInfinityと表示するのと、 階乗と終了する処理・・・・。 そして、終了の命令があるまで計算を続ける ソースを書く・・・。 ここからどのようにすればいいのでしょうか・・・ 教えてください。お願いします!

    • ベストアンサー
    • Java
  • 【初心者です】大文字←→小文字

    import java.io.*; public class ex52a { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader (System.in)); while(true) { System.out.print("String> "); String s = in.readLine(); if(s.equals("")) { break; } String res = ""; s = s.toUpperCase(); s = s.toLowerCase(); res = s; System.out.println(res); } } } これだと、大文字は小文字になるのに、小文字は大文字になりません。 単純に二つ並べるだけでは駄目なのでしょうか...

    • ベストアンサー
    • Java
  • フローチャートが作れず、困っています

    下のjavaソースコードのフローチャートを作りたいのですがわかりません。誰か教えてください。 import java.io.*; public class Sosuu { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); System.out.println("いくつまでの素数を表示するか入力してください"); try{ Prime prm = new Prime(Integer.parseInt(buf.readLine())); prm.calc(); }catch(NumberFormatException e){ System.out.println("数字を入力してください"); } } } class Prime { int endNum; public Prime(int endNum){ this.endNum = endNum; } public void calc(){ if(endNum <= 2){ System.out.println("2以上の数値を入力してください"); return; } for(int i = 2; i <= endNum; i++){ for(int k = 2; k <= i; k++){ if(k == i) System.out.println(Integer.toString(i)); else if((i % k) == 0) break; } } } }

  • ジャヴァ基礎問題

    import java.io.*; public class Email11 { public static void main(String[] argv) throws Exception { String input = "fileContainingEmails.txt"; String output = "copyPasteMyEmails.txt"; BufferedReader cin; cin = new BufferedReader(new InputStreamReader(System.in)); String userInput; System.out.println("Enter input file name [default name: fileContainingEmails.txt]"); userInput = cin.readLine(); if (userInput.equals("")) userInput = input; String name; if (userInput.equals("")) name = output; else name = input; String userOutput; System.out.println("Enter output file name [default name: " + name + " ]"); userOutput = cin.readLine(); if (userOutput.equals("")) userOutput = name; System.out.println("Input FIle : " + userInput); System.out.println("Output FIle : " + userOutput); } } このプログラムでユーザーがインプットファイル名を入力した場合そのファイル名がアウトプットファイルのデフォルトになるという形にしたいのですがどこが間違っていますか? ユーザーがデフォルトのインプットファイル名を選んだ場合デフォルトのアウトプットファイル名が適応されます。