あの、以前こちらで質問した者です。→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で質問しましょう!
似たような質問が見つかりました
- Ruby vscode 文字化け 1 2022/05/21 19:17
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- 英語 この英文の意味を教えてください 3 2023/07/07 20:36
- 英語 下記の英文の日本語訳をお願いします。 1 2023/03/02 10:01
- 英語 下記の英文を日本語に訳して、その意味を教えてください。 1 2023/03/09 14:13
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- オープンソース Try Kotlinで readLine()を使うには 1 2023/03/27 21:06
- ボランティア ウクライナ人からどういうこと? 6 2022/03/28 07:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
EclipseでJava
-
JAVAのDouble型の小数点以下の...
-
Javaのコマンドライン引数を使...
-
[JAVA]try 内の変数を外で!?
-
printfの%fにおいて教本どおり...
-
java シンボルが見つかりません...
-
会員情報登録プログラムの作成...
-
(急募) Javaじゃんけんゲームで...
-
binarySearchについて
-
配列を後ろから数えるには?
-
エクスクラメーション2つ?
-
エクセルマクロ文で、赤文字セ...
-
メール送信を行うJavaプログラム
-
コマンドプロンプトに不正な文...
-
Javaでファイル転送プログラム
-
javaで判別式のプログラミング...
-
LC発振回路-ループ利得
-
JAVAのエラーの意味が分かりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
JAVAのDouble型の小数点以下の...
-
EclipseでJava
-
「続行するには何かキーを押し...
-
文字列の引き算
-
java シンボルが見つかりません...
-
JAVA 文字色変更
-
改行の判定方法
-
JAVAのエラーの意味が分かりま...
-
Javaのコマンドライン引数を使...
-
java教えてください。
-
曜日の取得方法を教えて下さい!
-
JavaにはなぜGO TO ...
-
Javaでカレントディレクトリを...
-
構文解析中にファイルの終わり...
-
JAVA 三角形の判定
-
複数行キーボード入力した後に...
-
printfの%fにおいて教本どおり...
おすすめ情報