进行java测验并重复不正确的答案?

时间:2012-09-01 13:30:32

标签: java loops control-flow

我试图创建一个测验,以便它询问你一个多项选择的问题,虽然我似乎无法弄清楚如何将它循环回到不正确的问题.. 我仍然是java编程的新手,不幸的是我的理解不太好......

这是我目前编码的内容,

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 个答案:

答案 0 :(得分:2)

您需要将问题代码块提取到单独的方法中(或2!)。如果需要,这将允许您更方便地多次调用它。这看起来像是:

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

您当然可以向用户提供重新尝试while循环内部问题的选项

答案 1 :(得分:0)

您可以使用各种循环机制(for,do-while等)。什么时候(如果有的话)程序应该停止循环问题?它是否应该遍历所有问题(包括您正确回答的问题)?

简短的回答是你需要重复询问和检查问题。定义问题不需要重复。所以你的循环(你决定使用的循环)应该包围代码的一部分(a)显示问题[char x1 = ...]然后(b)检查并显示答案[switch语句的结尾] ]

答案 2 :(得分:0)

一种方法是创建一个包含所有问题的地图。

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
}

答案 3 :(得分:0)

你的方法只能用于一个非常简单的例子,你显然遇到了对用户做出反应的问题,因为你没有跟踪状态。

我写了这个,做你想要的(我想)。仔细阅读它,如果您对事情的原因或原因有疑问,请告诉我。

https://gist.github.com/3579413

(我把它放在一个公开的要点,因为有很多代码...)理想情况下,你将这些类拆分成自己的文件,这样你就不会得到一个非常繁琐的文件。希望你明白了。