Java言語の質問です。
下のようなクイズプログラムを作っていました。
九州地方の7つの都道府県をローマ字で答えて7つのうちいくつ正しいかをはかる問題のプログラムです。でも、1つしか入力しなかったときだけ反応して2つ以上だと変なエラーが出ます。
ファイル名はQshu.javaです。
一体どこがおかしいのでしょうか?
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Quiz{
String question;
String[] answer;
Quiz(String question, String answerline){
this.question = question;
StringTokenizer token = new StringTokenizer(answerline, ",");
answer = new String[token.countTokens()];
for(int c=0; token.hasMoreTokens(); c++)
answer[c] = token.nextToken();
}
String[] getCorrect(String inputline){
StringTokenizer token = new StringTokenizer(inputline, ",");
int inputnum = token.countTokens();
String[] input = new String[inputnum];
for(int c=0; token.hasMoreTokens(); c++)
input[c] = token.nextToken();
for(int c=1; c<inputnum; c++)
for(int f=c-1; c>=0; c--)
if(input[c].equals(input[f]))
input[c] = "0";
int correctnum=0;
for(int c=0; c<inputnum; c++)
for(int f=0; f<answer.length; f++)
if(input[c].equals(answer[f]))
correctnum++;
String[] correct = new String[correctnum];
int g=0;
for(int c=0; c<inputnum; c++)
for(int f=0; f<answer.length; f++)
if(input[c].equals(answer[f])){
correct[g] = input[c];
g++;
}
return correct;
}
}
class Qshu{
static String getInput(){
String input = new String();
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
input = br.readLine();
}catch(Exception e){
System.out.println(e);
}finally{
return input;
}
}
public static void main(String[] args){
Quiz qz = new Quiz("九州の都道府県(ローマ字で)", "Fukuoka,Saga,Nagasaki,Kumamoto,Oita,Miyazaki,Kagoshima");
System.out.print("【問題】" + qz.question + "を「,」で区切って答えなさい\n");
int answernum = qz.answer.length;
String input = getInput();
String[] correct = qz.getCorrect(input);
int correctnum = (correct == null) ? 0 : correct.length;
if(correctnum > 0){
System.out.print("正解:");
for(int f=0; f<correctnum; f++)
System.out.print(correct[f] + " ");
System.out.println();
}
System.out.print(correctnum + "/" + answernum + " 正解");
if(correctnum == answernum)
System.out.println(" よくできたね");
else if(correctnum > answernum / 2)
System.out.println(" まだまだだね");
else
System.out.println(" 出直してこい");
}
}
No.2
- 回答日時:
エラーが何行目で出たのかは表示されないんだっけ?
ともあれ
for(int c=1; c<inputnum; c++)
for(int f=c-1; c>=0; c--)
if(input[c].equals(input[f]))
input[c] = "0";
の部分, なんかおかしくない?
No.3
- 回答日時:
配列範囲外エラーですね。
行数や範囲外になった値も近所に書いてあるともいますが、-1 ではないかと思います。№1さんのように、
for(int f=c-1; c>=0; c--)
のc>=0をc>0に代えたらどうでしょうか。
No.4ベストアンサー
- 回答日時:
以下が出鱈目な挙動になっています。
for(int c=1; c<inputnum; c++)
for(int f=c-1; c>=0; c--) // fの意味は? cが無限ループ?
おそらくは配列の重複削除処理だと思いますが、
それならば以下のようにするのが一般的かと
for(int d=0; d<個数; d++)
for(int e=d+1; e<個数; e++)
// dとeを比較して重複ならeを削除
for(int f=c-1; c>=0; c--)の部分を「for(int f=c-1; f>0; f--)」に直したらエラーが消えて思う通りに動きました。変数cとfは重複していません。
ご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 繰り返し文にすると書き込めない(bw.write()) 2 2021/11/26 03:02
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaのmaxを使ったプログラムについて 2 2021/10/27 16:25
- Java java キーボード入力された値の数だけ文字を出力するfor文を使ったプログラムの書き方を教えてくだ 1 2022/02/06 15:55
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# c言語 文字化けします 2 2021/12/08 16:35
- C言語・C++・C# 論理演算子を判定するプログラム c言語で 3 2021/12/08 17:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java 入力した整数値の合計を、...
-
数値⇒漢数字変換 java
-
Java、2の0乗~10乗の表示
-
繰り返しによる星印の出力
-
論理演算子”||”またはの入力方法
-
*を表示させるプログラムを
-
リトルエンディアン→ビッグエン...
-
キーボードから10人分の点数を...
-
Randomメソッドの確率設定
-
要素数が10の配列で、乱数0~9...
-
java 配列
-
java break文とラベル
-
画面出力の際の繰り返しと入力...
-
Ctrl+Zが入力されると終了する...
-
(急いでいます)Javaで3回間違...
-
乱数の生成について
-
7つ数字を表示したら改行すると...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
キーボードから10人分の点数を...
-
階乗の式
-
Java 配列<選挙>
おすすめ情報
Tacosanさん、返信ありがとうございます。
「exception in thread "main" java.lang.arrayindexoutofboundsexception」っていうエラーが出ました。