我试图创建一个测验,以便它询问你一个多项选择的问题,虽然我似乎无法弄清楚如何将它循环回到不正确的问题.. 我仍然是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;
}
}
}
现在,使用此代码.. 如何为错误答案创建循环? 非常感谢帮助,谢谢。
答案 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
(我把它放在一个公开的要点,因为有很多代码...)理想情况下,你将这些类拆分成自己的文件,这样你就不会得到一个非常繁琐的文件。希望你明白了。