- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试制作两个类别的测验程序:Java 或 C++。我想提出一个有 4 个答案的问题(多项选择),但我不知道条件如何运作以及如何保存用户得分。
应用程序使用 JOptionPane
与用户交互。
这是我到目前为止所拥有的:
import javax.swing.JOptionPane;
public class Quiz1
{
public static void main(String[] args)
{
int score = 0;
JOptionPane.showMessageDialog(null,"WELCOME");
String name = JOptionPane.showInputDialog(null,"Enter Your Name: ");
String [] Intro = new String [] {"JAVA","C++"};
int option = JOptionPane.showOptionDialog(null, "Choose a Category" , "Menu", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, Intro, Intro[0]);
if (option == JOptionPane.YES_OPTION) // I just make YES or NO option since there are 2 choices
{
JOptionPane.showMessageDialog(null, "Hello "+ name + "\n Welcome to Java Quiz!");
JOptionPane.showMessageDialog(null, "1. Please read the questions carefully \n 2. Answer all the question \n 3. Scores will be computed after the quiz \n 4. No Cheating!","RULES",JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "This Quiz consist of \n 1. Multiple Choice \n 2.Enumeration \n 3. True/False");
JOptionPane.showMessageDialog(null,"Quiz #1: Enter the correct letter of the answer");
// STRING OF QUESTIONS
String[] quesJava = new String [] {"1) The JDK command to compile a class in the file Test.java is", "2) Java was developed by_____."};
String[] answers1 = new String[] {"A) java Test.java", "B) java Test","C) javac Test","D) javac Test.java"};
int answer1 = JOptionPane.showOptionDialog(null, quesJava[0], "JAVA", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, answer1, answer1[0]);
if (answer1== ???????????) // the answer is letter "D" but I don't know what will I put in here
{
score++;
}
String[] answer2 = new String[] {"A) IBM ", "B) Microsoft ","C) Sun Microsystem ","D) Oracle"};
int answer2 = JOptionPane.showOptionDialog(null, quesJava[1], "JAVA", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, answer2, answer2[0]);
{
if (answer2== )
{
score++;
}
}
JOptionPane.showMessageDialog(null,"your score is"+score);
}
}
}
最佳答案
我将重写您提供的代码以使这变得稍微容易一些......
这是最终结果:
import java.util.Random;
import javax.swing.JOptionPane;
public class Quiz {
/**
* This holds all the java questions.
*/
private static final Question[] JAVA_QUESTIONS = new Question[]{
new Question("Who developed Java?", 2, "Google", "Sun Microsystems", "Microsoft", "Oracle"),
//This creates the question: Who developed java with 4 answers (google, Sun, Microsoft and Oracle)
//The correct answer is 2 (Sun).
new Question("What modifier is used to make a variable constant?", 3, "public", "abstract", "final", "import")
};
/**
* This holds all the c++ questions.
*/
private static final Question[] CPP_QUESTIONS = new Question[]{
new Question("C++ is?", 4, "Interpreted", "A scripting language", "The first programming language", "Compiled")
};
/**
* The users score
*/
private int score;
/**
* The users name
*/
private String name;
/**
* What language the user selected.
*/
private Language lang;
private Quiz() {
setLookAndFeel();//Makes everything look nice
showOpeningDialogs();//Shows the welcome dialogs
askQuestions(10);//Asks random questions 10 times depending on what language is selected.
}
/**
* Asks random questions depending on the language chosen.
*
* @param maxScore the number of questions to ask
*/
private void askQuestions(int maxScore) {
for (int i = 0; i < maxScore; i++) {
Question q = getRandomQuestion(lang);//Gets a random question for the language chosen.
if (ask(q)) {//Checks if they got it correct
JOptionPane.showMessageDialog(null, "You answered correctly");//Tell them they got it correct
score++;//Increment their score.
} else {//If they got it wrong
JOptionPane.showMessageDialog(null, "You answered incorrectly. The answer is: " + q.getChoices()[q.getCorrectAnswer()]);
//Tell them they got it wrong and what the correct answer is.
}
}
JOptionPane.showMessageDialog(null, "Your score is: " + score + "/" + maxScore);//At the end, tell them their score
}
/**
* Asks a question and returns whether the player got it correct.
*
* @param question
* @return
*/
private boolean ask(Question question) {
//Shows a dialog with the question and answers.
int choice = JOptionPane.showOptionDialog(
null,
question.getQuestion(),
lang.getDisplayName(),
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
question.getChoices(),
question.getChoices()[0]);
//Checks to see if the answer is correct. This is determined by the answer variable in the question object.
if (choice == question.getCorrectAnswer()) {
return true;
}
return false;
}
/**
* Just makes everything look nice. You don't have to worry about this.
*/
private void setLookAndFeel() {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if (/**What java look and feel*/
"Windows".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
//Very unlikely to happen
}
}
/**
* Shows the welcome dialogs and so on.
*/
private void showOpeningDialogs() {
name = JOptionPane.showInputDialog(null, "Welcome.\nPlease enter you name:");//Gets the users name.
String[] langs = new String[]{Language.JAVA.getDisplayName(), Language.CPP.getDisplayName()};
int opt = JOptionPane.showOptionDialog(null, "Please chose your language", "Menu", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, langs, langs[0]);//Gets the language the user chose.
//Set the language depending on the users choice.
switch (opt) {
case JOptionPane.YES_OPTION:
lang = Language.JAVA;
break;
default:
lang = Language.CPP;
}
//The instructions.
JOptionPane.showMessageDialog(null, "Hello " + name + "\nWelcome to the " + lang.getDisplayName() + " Quiz!");
JOptionPane.showMessageDialog(null, "1. Please read the questions carefully \n2. Answer all the question \n3. Scores will be computed after the quiz \n4. No Cheating!", "RULES", JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(null, "This Quiz consist of \n 1. Multiple Choice");
//Do they want to continue
int begin = JOptionPane.showOptionDialog(null, "Are you ready to begin?", "Menu", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, new String[]{"Yes", "No"}, "Yes");
if (begin != JOptionPane.YES_OPTION) {
System.exit(0);
}
}
/**
* Gets a random question for a language
*
* @param lang the language
* @return a random question
*/
private Question getRandomQuestion(Language lang) {
switch (lang) {
case JAVA://If the language is java, choose a java question.
int random = new Random().nextInt(JAVA_QUESTIONS.length);
return JAVA_QUESTIONS[random];
case CPP://Else choose a C++ question.
random = new Random().nextInt(CPP_QUESTIONS.length);
return CPP_QUESTIONS[random];
}
return null;
}
public static void main(String[] args) {
Quiz q = new Quiz();//Just starts the application.
}
/**
* This class holds a question, the correct answer and the choices.
*/
private static final class Question {
/**
* The question being asked
*/
private final String question;
/**
* The correct choice. The index of the choices array.
*/
private final int correctAnswer;
/**
* The 4 choices the player can choose
*/
private final String[] choices;
public Question(String question, int correctAnswer, String... choices) {
if (question == null) {
throw new NullPointerException("The question cannot be null");
}
if (correctAnswer < 1 || correctAnswer > 4) {
throw new IllegalArgumentException("Correct answer must be between 0 and 5 (1 to 4)");
}
if (choices == null) {
throw new NullPointerException("choices cannot be null");
}
if (choices.length != 4) {
throw new NullPointerException("Choices must have 4 options");
}
this.question = question;
this.correctAnswer = correctAnswer - 1;
this.choices = choices;
}
/**
* @return the question
*/
public String getQuestion() {
return question;
}
/**
* @return the correctAnswer
*/
public int getCorrectAnswer() {
return correctAnswer;
}
/**
* @return the choices
*/
public String[] getChoices() {
return choices;
}
}
/**
* Which language we're using
*/
private enum Language {
/**
* The Java programming language
*/
JAVA("Java"),
/**
* The C++ programming language
*/
CPP("C++");
//The display name for the language
private final String displayName;
Language(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
}
}
它的作用:根据所选语言随机询问问题。
它是如何做到的:
它首先询问用户:他们的姓名以及他们想要测试的语言。这是在 showOpeningDialogs()
方法中完成的。他们在变量 name
和 lang
中提供的信息。
然后继续提问(重要部分)
在类的最顶部,我们有两个保存问题的数组,一个用于 Java(JAVA_QUESTIONS
),另一个用于 C++(CPP_QUESTIONS
)。这些数组保存问题、答案和正确答案。要添加更多问题,您只需向数组中添加一个新问题即可。
调用方法askQuestions(int maxScore)
。它首先从方法 getRandomQuestion(Language lang)
获取随机问题,然后调用方法 ask(Question Question)
,该方法向用户显示问题并返回用户是否正确。如果他们答对了,score
变量就会递增,并且会出现一个对话框,告诉他们答对了,如果答错了,会出现一个对话框,告诉他们正确的答案。此循环会循环您使用变量 maxScore
指定的次数(这可能应该低于数组中的问题数)。
代码有很好的文档记录,可以指导您完成正在发生的事情。
您需要稍微尝试一下代码才能完全理解它,但在大多数情况下,您想要的东西相当简单。
关于java - 该条件在 JOptionPane 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680964/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!