クイズのコンソールアプリケーションを作りたいのですが、どういう風に設計すればいいのか分からず困っています。仕様は以下の通りです。
・用意した問題がランダムに表示される。
・選択肢はア、イ、ウ、エの4択である。
・選択肢もランダムに表示される。
・答えを入力し、合っていれば「正解」と表示され、次の問題に進む。
間違っていれば「不正解」と表示されやり直す。
とりあえず途中まで書いたコードを載せておきます。```Java
package quiz;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Quiz {
public static void main(String[] args) { //クイズの番号を生成しシャッフル Integer[] quizNumber = {0,1,2}; List<Integer> QuizNumber = Arrays.asList(quizNumber); Collections.shuffle(QuizNumber); Question q = new Question(); Answer a = new Answer(); int num = 1;//問~用の変数 //クイズの開始 for(Integer i:QuizNumber){ System.out.print("問" + num + "、"); System.out.println(q.Question[i]); System.out.println(); a.printChoiceAnswer(i); System.out.println(); num++; } }
}
```Java package quiz; public class Question { public final String[] Question = {/*問1*/"キューに関する記述として、最も適切なものはどれか。", /*問2*/"再入可能プログラムの特徴はどれか。", /*問3*/"仮想記憶方式のコンピュータシステムにおいて、処理の多重度を増やしたところ、\n" + " ページイン、ページアウトが多発して、システムの応答速度が急速に遅くなった。\n" + " このような現象を何というか。" }; }
Java
1package quiz; 2 3import java.util.Arrays; 4import java.util.Collections; 5import java.util.List; 6 7public class Answer { 8 public final char[] choice = { 'ア', 'イ', 'ウ', 'エ' }; 9 10 public final String[][] choiceAnswer = { 11 //問1の選択肢 12 { "最後に格納されたデータが最初に取り出される。(×)", 13 "最初に格納されたデータが最初に取り出される(○)", 14 "添え字を用いて特定のデータを参照する。(×)", 15 "二つ以上のポインタを用いてデータの階層関係を表現する。(×)" 16 }, 17 18 //問2の選択肢 19 {"主記憶上のどこのアドレスに配置しても、実行することができる。(×)", 20 "手続きの内部から自分自身を呼び出すことができる。(×)", 21 "必要な部分を補助記憶装置から読み込みながら動作する。\n 主記憶領域の大きさに制限があるときに有効な手段である。(×)", 22 "複数のタスクからの呼び出しに対して、並行して実行されても、それぞれにタスクに正しい結果を返す。(○)" 23 }, 24 25 //問3の選択肢 26 {"オーバレイ(×)", 27 "スラッシング(○)", 28 "メモリコンバクション(×)", 29 "ロールアウト(×)" 30 } 31 }; 32 33 public void printChoiceAnswer(Integer i){ 34 for(int j = 0;j < 4;j++){ 35 List<String> ca = Arrays.asList(choiceAnswer[i]); 36 Collections.shuffle(ca);//選択肢をシャッフルしているつもりなのですが… 37 String Answer = choice[j] + " " + ca.get(j); 38 System.out.println(Answer.substring(0, Answer.length()-3)); 39 } 40 41 } 42}
問題文も選択肢も配列で処理しています。今の自分ではこれ以外の方法が思いつきません(なんとなくenumを使えばいいとは思うのだが具体的にどうしたらいいかわからない)。
問題文と選択肢のところどころにある空白は、表示されたときに体裁を整えるためのインデントです。なんとも不格好です。
答えを入力する処理はまだ書いていませんがそこは多分大丈夫です。ただ、入力された文字と問題の答えを一致させる処理をどうしたらいいのかわかりません。
あと、class Answer内のprintChoiceAnswerメソッド内で選択肢をシャッフルしているつもりなのですが、実行されるといくつかの選択肢がダブってしまいます。何でだろう…と考えているところで頭がごっちゃになって詰みました。どうしたらいいでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/03 05:20