嘿,我正在尝试为英语课的圣诞晚会构建测验程序。它具有GUI和所有功能,但在那并不重要。我有三个按钮,每个按钮带有答案A,B或C的标签。
我有一个Button Go,它可以填充数组中的第一个问题。所有其他问题也存储在一个数组中,但每个存储在不同的数组中。它们被命名为frage 1-10。它们包含“问题”三个可能的答案以及一个字符串,该字符串告诉程序哪个是正确的。我需要一个名为nextQuestion的服务,它将下一个数组填充到相应的字段中。我在这项服务方面遇到困难,因为我想不出任何办法。我将在此处发布我的源代码,希望您能对此提供帮助。由于我是德语,所以代码包含多语言部分。如果您正在努力理解,请不要犹豫,我将尽力解释我的代码。
在此先感谢您的支持。
import sum.komponenten.*;
import sum.werkzeuge.*;
import sum.ereignis.*;
public class DasQuiz extends EBAnwendung
{
// Objekte
private Etikett hatEtikettHeader;
private Knopf hatKnopfAnswerA;
private Knopf hatKnopfExit;
private Knopf hatKnopfAnswerB;
private Knopf hatKnopfAnswerC;
private Zeichenbereich hatZeichenbereichQuestion;
private Etikett hatEtikett2;
private Etikett hatEtikett3;
private Etikett hatEtikett4;
private Etikett hatEtikettTeamOne;
private Etikett hatEtikettTemaTwo;
private Etikett hatEtikettPunkte1;
private Etikett hatEtikettPunkte2;
private Knopf hatKnopfGo;
private String[] frage1 = new String[]{"What is traditionally hidden in a Christmas pudding?", "A Coin", "A Watch", "A pair of dice", "A"};
private String[] frage2 = new String[]{"How many days are there on a traditional advent calendar?", "12", "24", "30", "B"};
private String[] frage3 = new String[]{"____pull Santa's sleigh", "Guniea Pigs", "Cats", "Reindeers", "C"};
private String[] frage4 = new String[]{"According to the song, how many days of Christmas are there?", "11", "12", "13", "B"};
private String[] frage5 = new String[]{"Why do we shorten Christmas to Xmas?", "X is the first letter of the Greek word for Christ", "X looks like a snowflake", "X looks like a star", "A"};
private String[] frage6 = new String[]{"What is the last day of Christmas called?", "Advent", "Twelfth Night", "Boxing Day", "B"};
private String[] frage7 = new String[]{"Are used to make traditional Christingles", "Peaches", "Pears", "Oranges", "C"};
private String[] frage8 = new String[]{"Charles _____ wrote the book A Christmas Carol", "Dahl", "Rowling", "Dickens", "C"};
private String[] frage9 = new String[]{"Which royal couple started off the fashion for Christmas trees in Britain?", "King Henry adn Anne Boleyn", "Queen Victoria adn Prince Albert", "Prince William and kate Middleton", "B"};
private String[] frage10 = new String[]{"Which of these plants is traditionally connected with Christmas?", "Daisy", "Daffodil", "Poinsettia", "C"};
StringBuilder builder = new StringBuilder();
// Attribute
/**
* Konstruktor
*/
public DasQuiz()
{
//Initialisierung der Oberklasse
super(1255, 876);
hatEtikettHeader = new Etikett(468, 57, 225, 25, "Christmas Quiz LK English by Marc Blaesche");
// Ausrichtung
hatEtikettHeader.setzeAusrichtung(Ausrichtung.LINKS);
hatKnopfAnswerA = new Knopf(289, 472, 100, 25, "Answer A");
hatKnopfAnswerA.setzeBearbeiterGeklickt("hatSchalterAnswerAGeklickt");
hatKnopfExit = new Knopf(1078, 810, 100, 25, "Exit");
hatKnopfExit.setzeBearbeiterGeklickt("hatKnopfExitGeklickt");
hatKnopfAnswerB = new Knopf(514, 472, 100, 25, "Answer B");
hatKnopfAnswerB.setzeBearbeiterGeklickt("hatSchalterAnswerBGeklickt");
hatKnopfGo = new Knopf (514, 397, 100, 25, "GOGO");
hatKnopfGo.setzeBearbeiterGeklickt("hatKnopfGoGeklickt");
hatKnopfAnswerC = new Knopf(755, 472, 100, 25, "Answer C");
hatKnopfAnswerC.setzeBearbeiterGeklickt("hatSchalterAnswerCGeklickt");
hatZeichenbereichQuestion = new Zeichenbereich(288, 143, 566, 143, "");
hatEtikett2 = new Etikett(289, 300, 566, 25, "");
// Ausrichtung
hatEtikett2.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikett3 = new Etikett(289, 340, 566, 25, "");
// Ausrichtung
hatEtikett3.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikett4 = new Etikett(289, 380, 566, 25, "");
// Ausrichtung
hatEtikett4.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettTeamOne = new Etikett(72, 585, 100, 25, "Team One");
// Ausrichtung
hatEtikettTeamOne.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettTemaTwo = new Etikett(356, 586, 100, 25, "Tema Two");
// Ausrichtung
hatEtikettTemaTwo.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettPunkte1 = new Etikett(72, 671, 100, 141, "");
// Ausrichtung
hatEtikettPunkte1.setzeAusrichtung(Ausrichtung.LINKS);
hatEtikettPunkte2 = new Etikett(355, 669, 96, 141, "");
// Ausrichtung
hatEtikettPunkte2.setzeAusrichtung(Ausrichtung.LINKS);
}
public void hatKnopfAnswerAGeklickt()
{
}
public void hatKnopfExitGeklickt()
{
System.exit(0);
}
public void hatKnopfAnswerBGeklickt()
{
// Schreiben Sie hier den Text ihres Dienstes
}
public void hatKnopfAnswerCGeklickt()
{
// Schreiben Sie hier den Text ihres Dienstes
}
public void hatKnopfGoGeklickt()
{
hatZeichenbereichQuestion.setzeInhalt(frage1[0]);
hatEtikett2.setzeInhalt(frage1[1]);
hatEtikett3.setzeInhalt(frage1[2]);
hatEtikett4.setzeInhalt(frage1[3]);
}
public void nextQuestion()
{
}
}
最佳答案
阿努帕姆在评论中说的是正确的;我相信最简单/最快的方法是将您的frage
数组组合为二维数组,您可以对其进行迭代以获得下一个问题。
private String[][] questions = {frage1, frage2, frage3, frage4, frage5, frage6, frage7}
此外,您的代码需要知道哪个问题是“下一个问题”。有几种方法可以解决此问题,但是由于我们正在处理数组,因此一种方法是保持“索引”值,如下所示:
public class DasQuiz extends EBAnwendung {
private int currentQuestionIndex = 0;
...
然后,您的
nextQuestion
方法仅使用该值来确定接下来要加载的问题例如:
public void nextQuestion() {
String[] currentQuestion = questions[currentQuestionIndex];
hatZeichenbereichQuestion.setzeInhalt(currentQuestion[0]);
hatEtikett2.setzeInhalt(currentQuestion[1]);
hatEtikett3.setzeInhalt(currentQuestion[2]);
hatEtikett4.setzeInhalt(currentQuestion[3]);
currentQuestionIndex++; // increment to the next question index
}
另外,您的
hatKnopfGoGeklickt
方法可以简单地使用nextQuestion
,而不是自己做:public void hatKnopfGoGeklickt() {
nextQuestion();
}
旁注1:请注意,我没有检查
nextQuestion
中的任何数组越界问题,因为我不确定您的程序在到达问题末尾时的工作方式(可能很明显,不确定我的德语有点生锈)。旁注2:如果您创建一个代表问题及其对应答案的类,则可能会发现代码更简洁。
更新资料
关于您在不确定如何上一堂新课的评论中所说的话,这样的事情会很简单:
public class Question { // Frage
private String questionText;
private String[] answers;
private String correctOption;
public Question(String questionText, String[] answers, String correctOption){
...
}
}
关于java - 带GUI的Java测验,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27366982/