Javaでクイズ作成途中もエラー

このQ&Aのポイント
  • Javaでクイズ作成途中もエラーになってしまいます。どこから直せば良さそうですか?
  • 質問者は自己研究で質問しており、周りに質問する人がいません。
  • 質問した者がJavaで英単語を表示し、日本語で答えるクイズを作りたいが、コンパイル時にエラーになっている。
回答を見る
  • ベストアンサー

Javaでクイズ作成途中もエラー

あの、以前こちらで質問した者です。→http://okwave.jp/qa/q6482901.html 今、英単語が表示され日本語でそれを答えるクイズを作ろうとしています。 まだまだ作りかけですが、どうしてもコンパイル時にエラーになってしまいます。 どこから直せば良さそうですか?自己研究ということで周りに質問する人がいません。 すみませんがヒントを頂けたらと質問しました。よろしくお願いします。 import java.io.*; public class EnglishToJapaneseQuiz { public int MAX_QUESTION = 5; public int GOODANSWER = 0; public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("Welcome! This quiz helps you study Japanese in English"); System.out.println("'n' normal"); System.out.println("'h' hard"); System.out.println("'e' expert"); System.out.println("'z' exit"); System.out.println("Please select the level"); String line = reader.readLine(); char c = line.charAt(0); switch (c) { case 'n': System.out.println("You selected normal"); for (int i=0; i<MAX_QUESTION; i++) { int x = (int)(Math.random() * 10) + 1; switch (x) { case 1: System.out.println("School"); String Answer = "学校"; BufferedReader responce = new BufferedReader(new InputStreamReader(System.in)); String line = responce.readLine(); If (line.equals(Answer)) { System.out.println("correct"); GOODANSWER = GOODANSWER + 1; } else { System.out.println("incorrect"); } break; case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: } } break; case 'h': System.out.println("You selected hard"); break; case 'e': System.out.println("You selected expert"); break; case 'z': break; default: System.out.println("you must indicate valid character"); break; } } catch (IOException e) { System.out.println(e); System.out.println("invalid value"); } System.out.println("the program was successfully ended"); } }

  • isman
  • お礼率84% (22/26)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

☆コンパイルエラー解消のコツはエラーメッセージをみつつ、1つずつ根気よく潰していくことです。 まず、質問者さんのコードを打ち込んでみました。 http://ideone.com/yA83A >Main.java:31: ';' expected If (line.equals(Answer)) { 本来あるべきセミコロンがない、と言っています。 よく見てみるとifであるべきところがIfと書かれています。 コンパイラはこれをユーザーが定義したIfメソッドと解釈、何かを呼び出していると考えたのでしょう。 だから、 If(line.equals(Answer)); という一文だと思っています。セミコロンを付けると、{が余計だ、ときっと言ってくるでしょう。 「if構文」として取れないので、elseをみて「ifがないelseだ」という文句のおまけ付きです。 ☆今回のセミコロンの事例のように、本質とはずれた報告のされ方をすることがある。 ☆他のエラーが原因で発生するエラーもあって、芋づる式に治ることがある。どれを直せばどれが同時に直るか見極めよう! 直してみます。 ============================== 質問者環境ではやらなくていいですが、このサイトはMain.javaというファイル名でコンパイルするのでちょっとクラス名を修正。 改めてコンパイルしなおしたらエラーが新たな出てきやがりました。 http://ideone.com/4GeeJ 簡単そうなところから行きましょう。 Main.java:30: line is already defined in main(java.lang.String[]) String line = responce.readLine(); lineっていう変数は既にmainメソッドで定義されている、という情報を元に、ソースを眺めると、 17行目にありました。ってことで30行目の変数の型を取り払います。 String line = reader.readLine(); http://ideone.com/wv1uU >non-static variable MAX_QUESTION cannot be referenced from a static context 最後は説明しづらいから残したコイツ。staticでない変数MAX_QUESTIONはstaticなコンテキスト(ここでいうpublic static void main(String[] args))から参照できない、ってことで【暫定的に】 public int MAX_QUESTION = 5; public int GOODANSWER = 0; を public static int MAX_QUESTION = 5; public static int GOODANSWER = 0; と変えてみる。 コンパイルエラーが全て消えた。 http://ideone.com/lOqQ1 #1でそのまま実行してみたけど、例外(実行時エラー)がでたのは何も入力してないからだね。 #2ではupload with new inputからnを入力してみた結果だよ。 =========================================== ☆staticってどういうときに使われるか調べてみよう!個人的には今回のような暫定的な対処は良くない気がする。 ☆コンパイルエラーや実行時エラーが出ないようにするのは当然として、それ以外にも工夫できるところはいくつもあるよ! ★問題、選択肢、答えをファイルから取り込むようにすればswitch caseは要らないし、問題の改訂ごとにプログラムをコンパイルしなおす苦痛から解放されるよ #このサイトってファイル作れないんで標準入力を使って検証することになるけど。 ☆テストを最初に書いておくとか…(うまい話が回答として書けないんで省略)

isman
質問者

お礼

素早いお返事をどうもありがとうございます。 根気よく潰して行くしかないのですね。恥ずかしながら、かれこれ2時間くらいどこがいけないのか考えて、ifがIfになってた以外どうしても分からなかったので質問させてもらいました。(質問した後に気付きました。結局エラーでしたが) 問題用紙を別の所で用意してそこから問題を引き出す感じでしょうか?今一度オブジェクトの使い方を復習したいと思います。 ものすごく丁寧なご回答すごく分かりやすくて助かりました! ありがとうございました。

関連するQ&A

  • applet

    あの以前こちらで質問したものです。 →http://okwave.jp/qa/q6547731.html 前回、前々回とお世話になってます。あれから少し変化を加えて一応形にはなりました。来月提出ですが急にブラウザ上で表示させるようにしてくれと教授が学科長に言われたみたいなのでそうすることになりました。その予定はなかったのでアプレット参考書はないですが持ってる本に少し載っていました。(サンプルは表示させることはできました。wamp server使ってます)が自分のを表示できません。”エラー、クリックして詳細を確認”とでます。どうすれば良いでしょうか。(制限のため省略&見にくくてすみません) import java.io.*; import java.applet.Applet; public class EnglishToJapaneseQuiz2 { public static int MAX_QUESTION = 5; public static int GOODANSWER = 0; public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("Welcome! This quiz helps you study Japanese in English"); System.out.println("'n' normal"); System.out.println("Please select the level"); String line = reader.readLine(); char c = line.charAt(0); switch (c) { case 'n': System.out.println("You selected normal"); String normal[][]={{"School?","1.学校","2.生徒","3.先生","4.勉強","1"}, {"Human?","1.ゴミ","2.サル","3.ヒト","4.ブタ","3"}}; System.out.println("Choose the best one from multiples"); for (int i=0; i<MAX_QUESTION; i++) { int x = (int)(Math.random() * 10); System.out.println(normal[x][0]); System.out.println(normal[x][1]); System.out.println(normal[x][2]); System.out.println(normal[x][3]); System.out.println(normal[x][4]); BufferedReader responce = new BufferedReader(new InputStreamReader(System.in)); line = responce.readLine(); int input = Integer.parseInt(line); String answer = normal[x][5]; int inputanswer = Integer.parseInt(answer); if(input == inputanswer) { System.out.println("Correct"); GOODANSWER = GOODANSWER + 1; }else if(input <= 0 || input >=5) { System.out.println("Invalid Number"); }else { System.out.println("Incorrect"); } } System.out.println("You got "+GOODANSWER+" out of "+MAX_QUESTION); break; default: System.out.println("you must indicate valid character"); break; } } catch (IOException e) { System.out.println(e); System.out.println("invalid value"); } System.out.println("the program was successfully ended"); } }

    • ベストアンサー
    • Java
  • JAVAの初心者です。

    import java.io.*; class Sample1 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); do{ System.out.println("1:入力文字整数確かめ"); System.out.println("2:終了"); String hako = br.readLine(); int sen = Integer.parseInt(hako); switch (sen){ case 1: System.out.println("整数を入力してください。"); String hako2 = br.readLine(); int hako3 = Integer.parseInt(hako2); if ((hako3%2)==0){ System.out.println("これは偶数ですね。"); } System.out.println("奇数ですね。"); break; case 2: System.out.println("終了いたします。"); break; } }while(sen != 2); } } 上記のように組んだのですが、}whileのところでエラー が出てしまうのです。 これってなぜなのでしょう?? 初心者特有の質問かもしれませんがご教授いただけたら嬉しいです。宜しくお願いいたします。 関係ないのかも知れませんがJDK1-5-006を使用してます。

    • ベストアンサー
    • Java
  • javaじゃんけんゲーの質問

    このjavaじゃんけんゲームで 0を押すまでじゃんけんが続いて0押したら終了して、終了と表示して、じゃんけんの勝敗が表示されるように作りたいんですけどどうしたらいいですか?教えてください import java.io.*; class kadai6 { public static void main(String args[]) throws IOException { System.out.println("これは、じゃんけんゲームです。"); System.out.println("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)さぁどれにしますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res =Integer.parseInt(str); switch(res){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("あなたの入力した値はエラーです。1~3の値を入力してください。"); System.exit(1); break; } int comp = (int)(Math.random()*3) + 1; switch (comp){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; default: System.out.println ("エラーです。"); break; } switch (res -comp) { case -2: System.out.println("コンピュータの勝ちです。"); break; case -1: System.out.println ("あなたの勝ちです。"); break; case 0: System.out.println ("あいこです。"); break; case 1: System.out.println ("コンピュータの勝ちです。"); break; case 2: System.out.println("あなたの勝ちです。"); break; default: System.out.println ("エラーです。"); break; } } }

  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • javaのコンパイルエラーについてです。

    「これならわかるJava」という本でjavaを勉強してます。 以下のソースコードをコンパイルした所、 「注:DogList.java の操作は、未チェックまたは安全ではありません。 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください」 と、表示されます。 ネットで色々と調べてみましたが上手く行きません。 よろしくお願い致します。 import java.io.*; import java.util.*; class Dog { private String name; private int energy; public Dog(String n, int e){ name = n; if(e < 0) e = 0; energy = e; } public Dog(){ this("未定",50); } public void bark(){ if(energy == 0){ System.out.println("お腹が減ってほえられないよ。"); return; } System.out.println("わん、わん!"); energy--; } public void intro(){ System.out.println("僕の名前は" + name + "だ。わん。"); System.out.println("エネルギーは" + energy +"だ。わん。"); } public void eat(int e){ if(e < 0){ System.out.println("マイナスは与えられません。"); return; } energy += e; } public String getName(){ return name; } public void setName(String n){ name = n; } public int getEnergy(){ return energy; } public void setEnergy(int e){ if(e < 0) e = 0; energy = e; } public String toString(){ return "僕の名前は" + name + "だ。わん。\n" +"エネルギーは" + energy + "だ。わん。" ; } } class DogList { public static void main(String[] args) throws IOException { Vector dogs = new Vector(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str, name; int n, energy; for(;;){ System.out.println("名簿:どうしますか?"); System.out.println("1 一覧 2 追加 3 終了"); str = br.readLine(); n = Integer.parseInt(str); if(n == 1){ for(int i = 0; i < dogs.size(); i++){ ((Dog)dogs.elementAt(i)).intro(); System.out.println("-----"); } } else if(n == 2){ System.out.println("名前を入力:"); name = br.readLine(); System.out.println("エネルギーを入力:"); str = br.readLine(); energy = Integer.parseInt(str); dogs.addElement(new Dog(name, energy)); } else{ break; } } } }

    • ベストアンサー
    • Java
  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • javaでファイル操作し検索するものを作ってます

    目的はテキストファイル内の文字列に検索をかけヒットしたものを表示する というものです import java.io.*; class kensakuTest{ public static void main(String[] args)throws IOException{ System.out.println("検索方法を選択してください。\n0:学籍番号で検索\n1:名前で検索\n2:出身地で検索"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //0が選択された場合 if(res == '0'){ System.out.println("学籍番号を入力してください。"); BufferedReader bn = new BufferedReader(new InputStreamReader(System.in)); String str0 = fn.readLine(); char num = str0.charAt(0); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //1が選択された場合 if(res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); char name = str1.charAt(0); try{ FileReader freader = new FileReader("data.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 //部分一致 while((tmp=breader.readLine())!=null){ if(tmp.indexOf(str1) > -1){ System.out.println("結果は:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2'){ System.out.println("出身地を入力してください。"); BufferedReader bl = new BufferedReader(new InputStreamReader(System.in)); String belong = bl.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } } } 現状はここまでできましたが完全一致の検索のやり方がわかりません。 あと問題点があるのですが 読み取るファイルがこのような場合 2000,田中 太郎,福島県 2001,福島 太郎,東京都 名前で福島 と検索をかけたとします この場合答えが 2000,田中 太郎,福島県 2001,福島 太郎,東京都 と表示されてしまいます このカンマで区切られている学籍番号、名前、出身地をうまく分け それぞれ判別する方法はないのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • 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