• ベストアンサー

javaの問題の動かし方?

平成17年春期  基本情報技術者試験午後問題の 問12 JAVA電卓プログラムの プログラム4を 実際にコーディングしたのですが コンパイルできません。 (全部で4つのプログラムから構成されていて、 プログラム1、2、3はコンパイル及び実行できました) 肝心のメインメソッドである最後のプログラム4がコンパイルできず 実際の検証が出来ないので困っています。 (エラー内容) CalculatorTest.java:30: シンボルを見つけられません。 シンボル: メソッド eventDispatched(CalculatorEvent) 場所 : Calculator の クラス calc.eventDispatched(event); (プログラム内容) //プログラム4 public class CalculatorTest{ public static void main(String[] args){ Calculator calc = new Calculator( new CalculatorOutput(){ public void display(int value){ System.out.println(value); } public void display(String value){ System.out.println(value); } }); String keys = args[0]; for (int i=0; i<keys.length(); i++){ char c = keys.charAt(i); CalculatorEvent event = null; if (c>= '0' && c<= '9'){ event = new CalculatorEvent( CalculatorEvent.DIGIT,c - '0'); }else if (c == '=' || c == '+' || c == '-' || c == '*' || c == '/'){ event = new CalculatorEvent( CalculatorEvent.OPERATOR, c); }else if (c == 'C'){ event = new CalculatorEvent( CalculatorEvent.CLEAR); } if(event != null) calc.eventDispatched(event); } } } 尚、eventDispatchedは、プログラム3で出てきました。 プログラム1、2、3、4は ソースファイル、クラスファイル共に同じ フォルダにあります。 プログラム4の 何処をどの様に変更したら コンパイル及び実行できるようになるでしょうか? 詳しい方教えて下さい。 宜しくお願い致します。

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

Win98!? まあ、きっと大丈夫、うん。 ところでコマンドプロンプトで java -version をした結果を教えてくれないかしら。 それといったんクラスファイルをすべて削除して、 CalculatorTest.javaのみでコンパイルしてみて貰えるかな? その際、正常なら他のソースファイルも一緒に コンパイルされるわ。 CLASSPATHは http://www.hellohiro.com/appli.htm の下の方にある「◆変数の簡単な説明」が 的確な説明かしら。 ちなみに このサイト http://www.hellohiro.com/ はJavaの勉強にはいろいろ便利なので 暇のある時に一通り目を通しておくといいわ > iTEC JAVAプログラミング アイテックってことはJava初心者向けの本じゃないわね。 ある程度下地のできた人向けの試験対策本ね。 もしもう一冊買うなら ソフトバンククリエイティブの 「やさしいJava」あたりをお勧めしておくわ。 分厚いけどサンプルが多いし 文字も大きいし読みやすいわ。

gookinger
質問者

お礼

プログラム3のコーディングミスを発見、訂正して、 ご指南通りの結果を得ました。 20ポイントしか贈呈できないことが 残念です。 又、ご教授をお願い致します。 お忙しい中、沢山の貴重なお時間を戴き、 且つご丁寧なご助言を賜り、 ありがとうございました!

gookinger
質問者

補足

ご回答をありがとうございます。 >コマンドプロンプトで java -versionをした結果です。 尚、C:\Workは、ソースファイルと(classファイルの) 保存フォルダです。 C:\Work>java -version java version "1.5.0_17" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04) Java HotSpot(TM) Client VM (build 1.5.0_17-b04, mixed mode) >いったんクラスファイルをすべて削除して、 CalculatorTest.javaのみでコンパイル した結果です。 C:\Work>javac CalculatorTest.java CalculatorTest.java:30: シンボルを見つけられません。 シンボル: メソッド eventDispatched(CalculatorEvent) 場所 : Calculator の クラス calc.eventDispatched(event); ^ エラー 1 個 と表示しました。 そして、他のファイル (Calculator.java、CalculatorOutput.java、 CalculatorEvent.java)のclassファイルは、 3つ共に、生成しませんでした。 他の3つのclassファイルの未生成の異常は、 環境変数等の設定不備?ですか? 繰返しになりますが、 iTEC JAVAプログラミングの例題は、 問題なく起動しました。 更に別の本(工学社 文系のためのJAVA入門)の 例題も問題なく起動しました。 それで何故、基本情報技術者試験問題は こうも不動なのか、キツネにつままれている感じです そこで、更に教えて欲しいのですが、 基本情報技術者試験問題は、 クラスパス等の考慮も問うているのでしょうか? (一つのフォルダにソースファイルとそのクラスファイルを 全部保存して、同じフォルダ内で>java ・・・・とやっても 起動するプログラム仕様にしていない、という事実からの推定ですが・・・) 学習書のご指南、ありがとうございます。 検討しようかと思います。 長文かつ初心者の疑問ですみません。 宜しくお願いします。

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

その他の回答 (3)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.4

eventDispatched eventDispached さてどっち?? コンパイラはつねに正しい…。

gookinger
質問者

お礼

ありがとうございました。 >コンパイラはつねに正しい。 コンパイル及び実行できました。

全文を見る
すると、全ての回答が全文表示されます。
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

実は私はこの問題知っているのよ。 講習で教えたことあるし。 > クラスパスがわかりません 問題を解く前にそこから勉強しないとね 最初に確認しておけば良かったわ。 どんな環境で行っているのかしら? それと実際にコンパイルした方法を書いてもらえると何か判るかも。

gookinger
質問者

補足

ご回答を、ありがとうございます。 学習環境です。 OS:Win98SE JAVA:J2SE エディタ:秀丸エディタ テキスト:iTEC JAVAプログラミング(青表紙の本です)      尚、クラスパスの解説はありません。 コンパイル方法 まずプログラム1をコーディング、CalculatorEvent.javaで保存、 javac CalculatorEvent.javaでコンパイル。 プログラム2をコーディング、CalculatorOutput.javaで保存、 javac CalculatorOutput.javaでコンパイル。 プログラム3をコーディング、Calculator.javaで保存、 javac Calculator.javaでコンパイル。 プログラム4をコーディング、CalculatorTest.javaで保存、 javac CalculatorTest.javaでコンパイル。 MS-DOS窓でコンパイルと実行:例 java CalculatorEvent としています。 プログラム1から4の ソースファイル、クラスファイルは全て同じフォルダに格納しています。 又、iTEC JAVAプログラミングの例題も同様に、 コーディング、コンパイル、格納していて、 プログラムの実行結果を確認できています。 クラスパスは、ネット検索しましたが、 訳が分からずお手上げ状態です。 すみませんが、宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

エラーメッセージは CalculatorクラスにeventDispatched(CalculatorEvent) メソッドはないと言っているわ。 だから実際にはないのでしょう。 もしもCalculatorクラスにきちんと eventDispatched(CalculatorEvent)があるのなら Calculatorクラスが複数あって CalculatorTestコンパイル時の クラスパスの設定が間違っていたりするんじゃないかしら? としか現在の情報からでは推測できないわね。

gookinger
質問者

補足

早速のご回答をありがとうございました。 ご参考までに、 全プログラムをアップします。 //プログラム1 public class CalculatorEvent{ public static final int DIGIT = 1; public static final int OPERATOR = 2; public static final int CLEAR = 3; private int type,value; public CalculatorEvent(int type){ this(type,0); } public CalculatorEvent(int type, int value){ if(type<DIGIT || type>CLEAR) throw new IllegalArgumentException(); this.type = type; this.value = value; } public int getType() { return type;} public int getValue() { return value;} } //プログラム2 public interface CalculatorOutput{ public void display(int value); public void display(String value); } //プログラム3 public class Calculator{ private int accumulator = 0,register = 0; private int operator = 0; private CalculatorOutput output; public Calculator(CalculatorOutput output){ this.output = output; } public void eventDispached(CalculatorEvent event){ switch(event.getType()){ case CalculatorEvent.DIGIT: if(operator == '='){ register = 0; operator = 0; } register = register * 10 +event.getValue(); output.display(register); break; case CalculatorEvent.OPERATOR: try{ register = calculate(); output.display(register); accumulator = register; operator = event.getValue(); }catch(ArithmeticException e){ output.display("Error"); accumulator = 0; operator = 0; } if(operator != '=') register = 0; break; case CalculatorEvent.CLEAR: register = 0; accumulator = 0; operator = 0; output.display(register); } } private int calculate(){ switch(operator){ case '+': return accumulator + register; case '-': return accumulator - register; case '*': return accumulator * register; case '/': return accumulator / register; } return register; } } 実際は、この後にプログラム4が続いて 一つの完成プログラムとなります。 ところで、クラスパスというのがよく分かりません。 プログラム1,2,3,4、を 同一フォルダに置いて、コンパイル、classファイルを生成して実行 、する以外のファイル指定及び実行方法が有るのでしょうか? 済みませんが又、ご教授頂ければ幸いです。 宜しくお願いします。

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

関連するQ&A

  • java iを1づつ増やすプログラムと2づつ増やすプログラム

    次のようにすればiを1づつ増やして表示されます。 class Calc{   int i=1;   int add(){     return i++;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 1 i = 2 i = 3 しかし次のように2づつ増やそうとすると、 class Calc{   int i=1;   int add(){     return i+2;   } } class Count{   public static void main(String[] args){     Calc calc = new Calc();     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());     System.out.println("i = " + calc.add());   } } 実行結果 i = 3 i = 3 i = 3 このようになってしまいます。どこがおかしいのでしょうか?

    • ベストアンサー
    • Java
  • 以下の問題の式について教えてください。

    以下についてご教示願います。 class Calculator { public int count = 0; public void calc(int n, int p) { count++; if (p>n) return; for (int i=0; i<n; i++) { calc(n, p+1); } } } // int nは、キーボードからの入力 Calculator c = new Calculator(); c.calc(n, 0); System.out.println(c.count); この時、出力されるc.countはどのくらいですか? nを用いた式で表してください。

    • ベストアンサー
    • Java
  • JAVAのコンパイルについて教えてください。

    public class exam05d { public static void main(String[] args) { int value=args[0]; if(value==0) { System.out.println("valueの値は0"); } else { System.out.println("valueの値は0以外"); } } } 上記のプログラムをコンパイルすると exam05d.java:3: 互換性のない型 検出値:java.lang.String 期待値:int int value=args[0]; というエラーが出てしまいます。 これを正常に動作させるにはどう改良すれば良いか教えて頂けないでしょうか。 また変更を行わなければならない理由も教えていただけると有難いです。 プログラミングを始めたばかりで行き詰っています。 回答お待ちしております。

  • javaプログラムについて

    コマンドライン引数から複数の値を受け取り、それらの最大と最小を表示する、というプログラムなのですが。 class Maxmin{   public static void main (String[] args) {    int max=Integer.MIN_VALUE;    int min=Integer.MAX_VALUE;    for (int i=0; i<args.length; i++){     int num= Integer.parseInt(args[i]);     if(num>max)     max=num;     if(num<min)     min=num;    }    System.out.println("最大値は" + max + "です。");    System.out.println("最小値は" + min + "です。");  } } このプログラムでも問題なく表示されるのですが、MIN_VALUEとMAX_VALUEを使用せずに表示する事、と指摘を受けました。自分の中でぱっと思いついたのがこれだったのですが、他にはどのような方法があるのでしょうか?

    • ベストアンサー
    • Java
  • Javaの初歩

    変数のスコープみたいなものが、いまだに良く分かって ないみたいなんです。このプログラムを実行すると、 15 0 20と表示されるのですが、最後がなぜ15ではなく て、20なのかがなかなか分かりません。どなたか教えて 頂けませんでしょうか。お願いします。 class Value { public int i = 15; } public class Test { public static void main(String argv[]) { Test t = new Test(); t.first(); } public void first() { int i = 5; Value v = new Value(); v.i = 25; second(v, i); System.out.println(v.i); } public void second(Value v, int i) { i = 0; v.i = 20; Value val = new Value(); v = val; System.out.println(v.i + " " + i); } }

    • ベストアンサー
    • Java
  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • 専門学校で情報処理の勉強しております。自宅のパソコンが故障しており使用

    専門学校で情報処理の勉強しております。自宅のパソコンが故障しており使用不可能です。実際にプログラムを動かすことが一番なのですが、、大変申し訳ございませんが有識者の方ご教授お願い致します。Q1 class Calculator { public int count = 0; public void calc(int n, int p) { count++; if (p>n) return; for (int i=0; i<n; i++) { calc(n, p+1); } } } // int nは、キーボードからの入力 Calculator c = new Calculator(); c.calc(n, 0); System.out.println(c.count); この時、出力されるc.countはどのくらいですか? nを用いた式で表現しては頂けませんでしょうか

    • ベストアンサー
    • Java
  • java練習

    import java.util.Scanner; class test { public static void main (String[ ] args) throws IOException { System.out.println("文章を入力してください。"); BufferedReader input = new BufferedReader (new InputStreamReader (System.in)); String str = input.readLine( ); if (str == A) { str ="10"; } else if (str == 64) { str ="100"; } else if (str == 3E8) { str ="1000"; } else if (str == FF) { str ="255"; } else if (str == 100) { str ="256"; } System.out.println(" str + "); } } 今プログラミングの練習で文字や数字を判別するプログラムを作っています。 とりあえず16進数を入力したら10進数に変換されるプログラムを書いてたんですけどコンパイルしたらどうしてもエラーが出てきてしまいます。 調べてもよくわかりません、助けてください。

  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • [Java]Javaの文法が間違っているのでしょうか・・・?

    6人分の小テストの点数を記録し,平均点,最高点,平均点以下の人の一覧を計算するプログラムを作成したいのです。 入力はコマンドラインから行います。 しかし,TEST配列がうまく初期化がうまく記述できないため,コンパイル時点で”シンボルが見つけられません”というエラーが出てしまいます。 Javaの経験が浅いので、文法そのものが間違っているか心配です。C言語についてはある程度知識がありますから、C言語と対比して教えて頂けたりすると大変たすかります。 宜しくお願い致します。 class Lecture { static Lecture[] TEST; static double avg=0; static int max=0; static int i = 0; static String kamoku; int scorebox; String name; String student_number; Lecture(int size){ TEST = new Lecture[size]; for (int i = 0; i < size; i++) { Exercise a = new Exercise(); Student b = new Student(); TEST[i] = new Lecture(a,b); } } static void add(Exercise score, Student aStudent) { TEST[i].name = aStudent.name; TEST[i].student_number = aStudent.student_number; TEST[i].scorebox = score.score; i++; } static void avg() { int sum=0; for (int i = 0; i < 6; i++) { sum += TEST[i].scorebox; } avg = sum / 6; } static void max() { int max = 0; int temp = 0; for (int i = 0; i < 6; i++) { if (max < TEST[i].scorebox) { temp = i; max = TEST[i].scorebox; } } max = i; } static void show_kamoku(){ System.out.println("科目:"+kamoku); } static void show(){ Lecture.max(); System.out.println("平均点:"+avg); System.out.println("最高得点者:"+TEST[max]); } static void under_avg(){ Lecture.avg(); System.out.println("平均点を下回った者"); for(int i=0 ; i<6 ; i++){ if(avg > TEST[i].scorebox){ System.out.println(TEST[i]); } } } } class Exercise { int score; Exercise(int score) { this.score = score; } Exercise() { } public String toString() { return " 得点:" + score; } } class Student { String name; String student_number; Student(String student_number,String name ) { this.name = name; this.student_number = student_number; } Student() { } public String toString() { return "学籍番号:" + student_number + " 名前:" + name; } } class ExerciseEvaluation { public static void main(String args[]){ Lecture.kamoku=args[0]; Lecture[] lec = new Lecture[6]; Student Y0 = new Student(args[1],args[2]); Exercise X0 = new Exercise(Integer.parseInt(args[3])); lec[0].add(X0, Y0); Student Y1 = new Student(args[4], args[5]); Exercise X1 = new Exercise(Integer.parseInt(args[6])); lec[1].add(X1, Y1); Student Y2 = new Student(args[7], args[8]); Exercise X2 = new Exercise(Integer.parseInt(args[9])); lec[2].add(X2, Y2); Student Y3 = new Student(args[10], args[11]); Exercise X3 = new Exercise(Integer.parseInt(args[12])); lec[3].add(X3, Y3); Student Y4 = new Student(args[13], args[14]); Exercise X4 = new Exercise(Integer.parseInt(args[15])); lec[4].add(X4, Y4); Student Y5 = new Student(args[16], args[17]); Exercise X5 = new Exercise(Integer.parseInt(args[18])); lec[5].add(X5, Y5); Lecture.show_kamoku(); Lecture.show(); Lecture.under_avg(); } }