我正在尝试使用netbeans为学校项目在java中创建一个测验程序。
我有大约40个问题,需要将它们存储在二维数组中
String qna[][]=new String[40][5];\\ for the question and each of the four options which will be displayed on 4 toggle buttons
我的问题是我必须输入大量代码来加载每个问题及其问题。四个选项,当我必须编辑questons时很难
有没有更有效的方法(例如使用文本文档或其他地方存储的东西)?
答案 0 :(得分:2)
你不应该使用2D数组来存储问题和答案,这很糟糕而且很脆弱!
您可以创建一个名为CompoundQuestion
的类,其中包含问题和答案,然后创建CompoundQuestion
的一些对象。课程应该是这样的:
public class CompoundQuestion {
private String question;
private String[] answers;
public String getQuestion () { return question; }
public String[] getAnswers () { return answers; }
public CompoundQuestion (String question, String[] answers) {
this.question = question;
this.answers = answers;
}
public CompoundQuestion (String question, String... answers) {
this(question, answers);
}
}
以上只是一个简单的实现。如果您不理解类的概念,请阅读:
https://docs.oracle.com/javase/tutorial/java/javaOO/classes.html
如果您不知道String...
正在做什么,请阅读:
https://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
如果您仍然不明白,只需使用构造函数的第一个重载。
你可以像这样使用你的课程(假设你理解String...
部分):
CompoundQuestion myQuestion = new CompoundQuestion ("Is Sweeper handsome?", "Yes!", "YASSS", "Yeeeeeeeesssss");
然后你可以将它存储在一个数组中:
CompoundQuestion[] questionArray = new CompoundQuestion[40];
当然,您可以致电:
来获取问题的文字和答案getQuestion ()
和
getAnswers ()
如果您不理解课程,只需使用2D数组......我无言以对。
如果您还想存储正确的答案,可以向CompoundQuestion
类添加一些代码:
private int correctAnswer;
public String getCorrectAnswer () {
return answers[correctAnswer];
}
你也可以将它添加到构造函数中!
编辑:
您也可以将CompoundQuestion
放入文本文件中,以便即使在程序完成后也可以保存它!
使用ObjectInputStream
和ObjectOutputStream
。后者用于“序列化”计算机上文件中的CompoundQuestion
!并使用前者将其反序列化为CompoundQuestion
对象。
此处提供更多信息:
ObjectInputStream
:http://www.tutorialspoint.com/java/io/java_io_objectinputstream.htm
ObjectOutputStream
:http://www.tutorialspoint.com/java/io/java_io_objectoutputstream.htm
答案 1 :(得分:0)
不使用多维数组而是创建类QnA来存储问题和相应的答案选项。
class QnA {
String question;
String[] answer_options;
}
将您的问题(和相应的答案)存储在json(txt)文件中
[ { "问题":"你好吗", " answer_options":[" Bad"," OK"," GOOD" ] }, { "问题":"天空是什么颜色", " answer_options":[" Blue"," Green"," Red" ] } ]
使用此文件填充QnA对象的数组,例如QnA[] Qestions
。
答案 2 :(得分:0)
创建课程如何存储问题及其所有答案?
IReadOnlyCollection<IWebElement> types = Driver.FindElements(By.CssSelector("div.types"));
foreach (IWebElement type in types)
{
Assert.Istrue(type.FindElement(By.CssSelector("div.span7")).FindElements(By.TagName("b")).Count > 0);
}
然后你可以创建一个从文本文件中读取的类,并使用BufferedReader为你的所有问题创建一个List,如下所示:
class Question {
private String question;
private List<String> answers;
Question(String question) {
this.question=question;
answers = new ArrayList<>();
}
public void addAnswer(String answer){
this.answers.add(answer);
}
//Getters
}
}
它从结构为
的文件中读取public class QuestionLoader {
//Pass the path to your file as the parameter
public List<Question> loadFromFile(String path) {
List<Question> allquestions = new ArrayList<>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(path)));
Question question = null;
String line = br.readLine();
while (line != null) {
if (line.startsWith("Q::")) {
question = new Question(line.split("::")[1]);
} else if (line.startsWith("A::")) {
question.addAnswer(line.split("::")[1]);
} else if (line.equals("")) {
allquestions.add(question);
}
line = br.readLine();
}
br.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(QuestionLoader.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(QuestionLoader.class.getName()).log(Level.SEVERE, null, ex);
}
return allquestions;
}
简单地用新行分隔问题。这样,如果您需要任意数量的问题或答案,则无需更改代码。它可能不是最有效的,但我发现使用列表比使用数组更愉快。