質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2779閲覧

続・クイズを作りたいのだがうまくいかない。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/12/03 01:44

クイズを作りたいのだがうまくいかない。
上の質問の続きです。argius様の返答を参考に作り直したところ、以下の構造になりました。

・一つのクラスで一つの問題を扱う(Question1Question3)。
・Question1
Question3は全てQuestionSuperを継承している。
・QuestionSuper型の配列 Q にQuestion1Question3を格納する。この配列をシャッフルすることで問題の出題順をシャッフルする。
・QuestionSuperはフィールドにsentence(問題分)とselectAnswer[0]
[3](選択文)をもつ。サブクラスごとにこれらを定義する。
・selectAnswer[0]を正解の選択文とする。
・選択肢ア、イ、ウ、エが格納されている配列をシャッフルし、先頭に来たものをcorrectAnswer(正解の選択肢)とする。あとの三つをwrongAnswerとする。
・シャッフルした選択肢とselectAnswer[0]~[3]をくっつける。それらをリスト decision に格納する。
・decisionをアイウエ順にソートし、表示する。

・入力した文字がcorrectAnswerと一致すれば「正解です」、wrongAnswer1~3と
一致すれば「ちがいます」、それ以外の文字を入力すると「ア、イ、ウ、エで入力してください」と表示される。

Java

1package quiz; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6import java.util.Arrays; 7import java.util.Collections; 8import java.util.List; 9 10public class Quiz { 11 static Question1 Q1 = new Question1(); 12 static Question2 Q2 = new Question2(); 13 static Question3 Q3 = new Question3(); 14 15 public static void main(String[] args)throws IOException{ 16 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 17 18 QuestionSuper[] Q = new QuestionSuper[3]; 19 Q[0] = Q1; 20 Q[1] = Q2; 21 Q[2] = Q3; 22 23 List<QuestionSuper> ListQ = Arrays.asList(Q); 24 Collections.shuffle(ListQ); 25 26 int num = 1; 27 for(QuestionSuper qs:ListQ){ 28 System.out.println("【問"+ num + "】"); 29 30 qs.printSentence(); 31 System.out.println(); 32 qs.printSelectAnswer(); 33 34 do{ 35 String answer = br.readLine(); 36 if(answer == qs.correctAnswer){ 37 System.out.println("正解です。"); 38 break; 39 } 40 else if((answer == qs.wrongAnswer1) || (answer == qs.wrongAnswer2) || (answer == qs.wrongAnswer3)){ 41 System.out.println("ちがいます。"); 42 } 43 else{ 44 System.out.println("ア、イ、ウ、エで入力してください。"); 45 } 46 47 }while(true); 48 49 num++; 50 } 51 52 } 53 54} 55
```Java package quiz; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class QuestionSuper { protected String sentence = ""; protected String correctAnswer = ""; protected String wrongAnswer1 = ""; protected String wrongAnswer2 = ""; protected String wrongAnswer3 = ""; protected String[] selectAnswer = new String[4]; protected String[] choice = {"ア","イ","ウ","エ"}; List<String> choices = new ArrayList<String>(); List<String> decision = new ArrayList<String>(); void printSentence(){ System.out.println(sentence); } void shuffleChoice(){ for(String s:choice){ choices.add(s); } Collections.shuffle(choices); this.correctAnswer = choices.get(0); this.wrongAnswer1 = choices.get(1); this.wrongAnswer2 = choices.get(2); this.wrongAnswer3 = choices.get(3); } void printSelectAnswer(){ shuffleChoice(); for(int i = 0;i < 4;i++){ decision.add(choices.get(i) +" " + selectAnswer[i]); } Collections.sort(decision); for(int i = 0;i < 4;i++){ System.out.println(decision.get(i)); } } }

Java

1package quiz; 2 3public class Question1 extends QuestionSuper { 4 public Question1(){ 5 this.sentence = "キューに関する記述として、最も適切なものはどれか。"; 6 this.selectAnswer[0] = "最初に格納されたデータが最初に取り出される。"; 7 this.selectAnswer[1] = "最後に格納されたデータが最初に取り出される"; 8 this.selectAnswer[2] = "添え字を用いて特定のデータを参照する。"; 9 this.selectAnswer[3] = "二つ以上のポインタを用いてデータの階層関係を表現する。"; 10 } 11 12} 13

Java

1package quiz; 2 3public class Question2 extends QuestionSuper { 4 public Question2(){ 5 this.sentence = "再入可能プログラムの特徴はどれか。"; 6 this.selectAnswer[0] = "複数のタスクからの呼び出しに対して、並行して実行されても、それぞれのタスクに正しい結果を返す。"; 7 this.selectAnswer[1] = "主記憶上のどこのアドレスに配置しても、実行することができる。"; 8 this.selectAnswer[2] = "手続きの内部から自分自身を呼び出すことができる。"; 9 this.selectAnswer[3] = "必要な部分を補助記憶装置から読み込みながら動作する。\n" 10 + " 主記憶の大きさに制限があるときに有効な手段である。"; 11 } 12 13}

Java

1package quiz; 2 3public class Question3 extends QuestionSuper { 4 public Question3(){ 5 this.sentence = "仮想記憶方式のコンピュータにおいて、処理の多重度を増やしたところ、\n" 6 + "ページイン、ページアウトが多発して、システムの応答速度が急速に遅くなった。\n" 7 + "このような現象を何というか。"; 8 this.selectAnswer[0] = "スラッシング"; 9 this.selectAnswer[1] = "オーバレイ"; 10 this.selectAnswer[2] = "メモリコンバクション"; 11 this.selectAnswer[3] = "ロールアウト"; 12 } 13 14}

問題文、選択肢ともにランダムに出題することには成功しています。ところが、何を入力しても「ア、イ、ウ、エで入力してください。」と表示されてしまうのです。一体なぜでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Java

1if(answer == qs.correctAnswer){

Java

1else if((answer == qs.wrongAnswer1) || (answer == qs.wrongAnswer2) || (answer == qs.wrongAnswer3)){

「answer.equals(...)」で比較してください。

投稿2015/12/03 02:45

hyper-drums-ko

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/03 05:14

回答ありがとうございました。
guest

0

ベストアンサー

answer == qs.correctAnswerがいけないと思います。
→ オブジェクト比較になるので常にfalse

answer.equals(qs.correctAnswer)にすべきですね。
→ 値の比較です。

望ましいのは、
qs.correctAnswer.equals(answer)

以上、どうでしょうか。

投稿2015/12/03 02:42

liguofeng29

総合スコア801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/12/03 05:13

できました! 前回の質問に続いての返答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問