1

間違った質問にループバックする方法がわからないようですが、多肢選択式の質問をするようにクイズを作成しようとしています。私はまだJavaプログラミングに慣れていないので、残念ながら私の理解はありません。そんなに良くない..

これが現在コーディングされているiveです。

import java.util.*;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Quiz2
{
public static int question;
public static int question2;
public static int question3;
public static int question4;
public static int question5;

public static String guess;
public static String guess2;
public static String guess3;
public static String guess4;
public static String guess5;

public static void main(String[] args)
{   
    //create a scanner object
    Scanner sc = new Scanner(System.in);

    JOptionPane.showMessageDialog(null, "Hi, This is my Quiz\nYou will be asked a total of 5 questions in multiple choice format\nPlease answer as A/B/C/D (Not case sensative)", "Introduction",
    JOptionPane.INFORMATION_MESSAGE);

    //Asks for a paricular item from the keyboard
    guess  = JOptionPane.showInputDialog(null, "1. Which of the following is not a bright colour?\nA. Cyan\nB. Green\nC. Black\nD. Yellow\nAnswer: ", "Question 1",
    JOptionPane.INFORMATION_MESSAGE);

    //Asks for a paricular item from the keyboard
    guess2  = JOptionPane.showInputDialog(null, "2. What genre does the singer John Legend sing in?\nA. Pop\nB. R&b\nC. Rap\nD. Rock\nAnswer: ", "Question 2",
    JOptionPane.INFORMATION_MESSAGE);

    //Asks for a paricular item from the keyboard
    guess3  = JOptionPane.showInputDialog(null, "3. What is the largest discovered Star in the Universe?\nA. The Sun\nB. VY Canis Majoris\nC. Eta Carinae\nD. Beetlejuice\nAnswer: ", "Question 2",
    JOptionPane.INFORMATION_MESSAGE);

    //Asks for a paricular item from the keyboard
    guess4  = JOptionPane.showInputDialog(null, "4. Who is Ronaldinho Gaucho?\nA. A famous Soccer player\nB. A famous Singer\nC. The founder of Microsoft\nD. A famous Actor\nAnswer: ", "Question 2",
    JOptionPane.INFORMATION_MESSAGE);

    //Asks for a paricular item from the keyboard
    guess5  = JOptionPane.showInputDialog(null, "5. Who is the actor who played the role as the terminator in the movie Last Action Hero?\nA. Arnold Schwarzenegger\nB. Adam Sandler\nC. Jean Claude Van Damme\nD. Sylvester Stallone\nAnswer: ", "Question 2",
    JOptionPane.INFORMATION_MESSAGE);

    char x1 = guess.charAt(0);
    char x2 = guess2.charAt(0);
    char x3 = guess3.charAt(0);
    char x4 = guess4.charAt(0);
    char x5 = guess5.charAt(0);

    switch (x1)
    {
        case 'a': 
        case 'A':
                    JOptionPane.showMessageDialog(null, "Incorrect! Cyan is a bright colour, Please Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'b':
        case 'B':
                    JOptionPane.showMessageDialog(null, "Incorrect! Green is a bright colour, Please Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'c': 
        case 'C':
                    JOptionPane.showMessageDialog(null, "Correct! Black is not a bright colour", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'd':
        case 'D': 
                    JOptionPane.showMessageDialog(null, "Incorrect! Yellow is a bright colour, Please Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
    }



    switch (x2)
    {
        case 'a': 
        case 'A':
                    JOptionPane.showMessageDialog(null, "Incorrect! John Legend is not a Pop Singer!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'b':
        case 'B':
                    JOptionPane.showMessageDialog(null, "Correct! John Legend is a R&B Singer!", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'c': 
        case 'C':
                    JOptionPane.showMessageDialog(null, "Incorrect! John Legend does not Rap!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'd':
        case 'D': 
                    JOptionPane.showMessageDialog(null, "Incorrect! John Legend is not in the genre of Rock!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
    }

    switch (x3)
    {
        case 'a': 
        case 'A':
                    JOptionPane.showMessageDialog(null, "Incorrect! The Sun is the Biggest Star in our Solar System and not the Universe!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'b':
        case 'B':
                    JOptionPane.showMessageDialog(null, "Correct! VY Canis Majoris is currently the Largest Star Discovered in the Universe!", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'c': 
        case 'C':
                    JOptionPane.showMessageDialog(null, "Incorrect! Eta Carinae is the Second Largest Star Discovered in the Universe!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'd':
        case 'D': 
                    JOptionPane.showMessageDialog(null, "Incorrect! Beetlejuice is the Third Largest Star Discovered in the Universe!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
    }

    switch (x4)
    {
        case 'a': 
        case 'A':
                    JOptionPane.showMessageDialog(null, "Correct! Ronaldinho Gaucho is a famous Soccer player!", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'b':
        case 'B':
                    JOptionPane.showMessageDialog(null, "Incorrect! Ronaldinho Gaucho is not a Singer!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'c': 
        case 'C':
                    JOptionPane.showMessageDialog(null, "Incorrect! Bill Gates was the founder of Microsoft! NOT Ronaldinho Gaucho!!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'd':
        case 'D': 
                    JOptionPane.showMessageDialog(null, "Incorrect! Ronaldinho Gaucho is not an actor!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
    }

    switch (x5)
    {
        case 'a': 
        case 'A':
                    JOptionPane.showMessageDialog(null, "Incorrect! Arnold Schwarzenegger was the main actor of Last Action Hero, but in that same movie, who played the role as the terminator?\n Try Again!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'b':
        case 'B':
                    JOptionPane.showMessageDialog(null, "Incorrect! No its not Adam Sandler, but it would be funny if it was!,\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'c': 
        case 'C':
                    JOptionPane.showMessageDialog(null, "Incorrect! It could have been Jean Claude Van Damme!\nBut its not....\nPlease Try Again..", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
        case 'd':
        case 'D': 
                    JOptionPane.showMessageDialog(null, "Correct! Sylvester Stallone played the role as the Terminator in the Movie Last Action Hero!", "Answer CHECK!",
                    JOptionPane.INFORMATION_MESSAGE);
                    break;
    }
}
}

さて、このコードを使用して..間違った答えのループを作成するにはどうすればよいですか?助けていただければ幸いです、ありがとう。

4

4 に答える 4

2

質問をするコード ブロックを別のメソッド (または 2!) に抽出する必要があります。これにより、必要に応じて複数回呼び出すことがより便利になります。これは次のようになります。

while (!askQuestionsWithAllCorrect()) {
   System.out.println("Asking again...");
}

もちろん、while ループ自体の中で質問を再試行するオプションをユーザーに与えることもできます。

于 2012-09-01T13:35:10.543 に答える
0

あなたのアプローチは非常に単純な例でのみ実際に機能し、状態を追跡していないため、明らかにユーザーへの反応に問題があります。

私はあなたが望むことをするこれを書きました(私は思います)。それを調べて、物事がどのように/なぜであるかについて質問がある場合は私に知らせてください。

https://gist.github.com/3579413

(コードがたくさんあるので、私はそれを公開の要点に置きます...)理想的には、それらのクラスを独自のファイルに分割して、非常に面倒なファイルになってしまわないようにします。うまくいけば、あなたはアイデアを得るでしょう。

于 2012-09-01T16:29:15.810 に答える
0

1 つのアプローチは、すべての質問を含むマップを作成することです。

Map<Integer, String> questionMap;

質問に正しく答えた場合、マップから削除します。を使用することもできますConcurrentHashMap。これは、マップからの要素の同時削除をサポートします。

questionMap = new ConcurrentHashMap<Integer, String>();
// populate the map with your questions

for(Integer i : questionMap.keySet()) {
    if(t.isQuestionTrue(answer, questionMap.get(i))) {
        questionMap.remove(i);
    }
}

...または、非並行マップを使用し、を使用しIteratorて要素を同時に安全に削除することもできます。

questionMap = new HashMap<Integer, String>();
// populate the map with your questions

Iterator<Map.Entry<Integer, String>> it = questionMap.entrySet().iterator();
while(it.hasNext()) {
    Map.Entry entries = it.next();
    if(t.isQuestionTrue(answer, (String)entries.getValue())) {
        it.remove();
    }
}

マップに要素が残っている間、ループが確立されて実行が継続されます。

while(questionMap.size() > 0) {
    // run through your program
}
于 2012-09-01T14:23:41.397 に答える
0

さまざまなループ メカニズムを使用できます (for、do-while など)。プログラムが質問のループを停止する必要がある場合はいつですか? すべての質問 (正解したものを含む) をループする必要がありますか?

簡単に言えば、質問の確認と確認を繰り返す必要があるということです。質問の定義を繰り返す必要はありません。したがって、ループ (使用することに決めたもの) は、(a) 質問を表示する [char x1=...] と (b) 答えをチェックして表示するコードの部分を囲む必要があります [switch ステートメントの終わり]。

于 2012-09-01T13:48:40.100 に答える