あの、以前こちらで質問した者です。→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");
}
}
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は要らないし、問題の改訂ごとにプログラムをコンパイルしなおす苦痛から解放されるよ
#このサイトってファイル作れないんで標準入力を使って検証することになるけど。
☆テストを最初に書いておくとか…(うまい話が回答として書けないんで省略)
素早いお返事をどうもありがとうございます。
根気よく潰して行くしかないのですね。恥ずかしながら、かれこれ2時間くらいどこがいけないのか考えて、ifがIfになってた以外どうしても分からなかったので質問させてもらいました。(質問した後に気付きました。結局エラーでしたが)
問題用紙を別の所で用意してそこから問題を引き出す感じでしょうか?今一度オブジェクトの使い方を復習したいと思います。
ものすごく丁寧なご回答すごく分かりやすくて助かりました!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
nullcline
-
C言語のポインターに関する警告
-
JAVAのDouble型の小数点以下の...
-
JAVA 文字色変更
-
Javaプログラムについて質問で...
-
[JAVA]try 内の変数を外で!?
-
配列を後ろから数えるには?
-
EclipseでJava
-
JSPやサーブレットでSystem.out...
-
javaで画像をランダムに表示さ...
-
ボタンの複数割り当てについて
-
javaで大容量テキストファイル...
-
System.err. printlnとSystem.o...
-
Javaで文字と数字が混ざったも...
-
Log4jで機能毎に別ファイルへ出...
-
ダブルクォーテーションを含む...
-
動的配列が存在(要素が有る)か...
-
無名配列の作成方法について質問
-
変数を動的に利用するには?
-
StringクラスのcompareToメソッド
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
[JAVA]try 内の変数を外で!?
-
EclipseでJava
-
JAVAのエラーの意味が分かりま...
-
文字列の引き算
-
JAVA 文字色変更
-
改行の判定方法
-
エクセルマクロ文で、赤文字セ...
-
Javaでカレントディレクトリを...
-
JAVAのDouble型の小数点以下の...
-
DOMで要素の値がNULL
-
ファイル名に変数を使う(Java)
-
IPアドレスから組織やプロバイ...
-
Javaのプログラムがどうしても...
-
java int integer
-
java シンボルが見つかりません...
-
javaで判別式のプログラミング...
-
Javaプログラムについて質問で...
-
構文解析中にファイルの終わり...
おすすめ情報