Сначала вам нужно определиться со структурой вашего текстового файла.Вот как вы можете это сделать.
Пример текстового файла:
3
%%%
@@@
&&&
What is Java?%%%a. Food@@@b. Programming Language@@@c. Person%%%b
Is this a question?%%%a. Yes@@@b. No@@@c. Maybe%%%a
Are you correct?%%%a. Yes@@@b. No@@@c. Maybe%%%c
3
- это количество вопросов в файле
%%%
- это разделитель длячасти вопроса
@@@
- это разделитель для частей выбора
&&&
- это разделитель для частей ответов (если есть вопросы с несколькими ответами)
Последующие части являются вопросами.Формат: (question part)%%%(choice part)%%%(answer part)
Поскольку существует множество возможных вариантов, вы можете отформатировать возможный выбор следующим образом: (choice a)@@@(choice b)@@@(choice c)
это (choice part)
сверху.
Так как естьвозможно много возможных ответов, вы можете отформатировать возможные ответы следующим образом: (answer a)@@@(answer b)@@@(answer c)
это (answer part)
сверху.
Как только вы определились, как выглядит ваш текстовый файл, вы можете создать класс, который будет содержатьэти вопросы, выбор и ответы.Вот пример:
public class Question {
private String question; // This will hold the question
private String[] choices;// This will hold the choices
private String[] answers;// This will hold the correct answer/s, I made it an array since there might be
// a question that has multiple answers
public Question(String question, String[] choices, String[] answers) {
this.question = question;
this.choices = choices;
this.answers = answers;
}
/**
* @return the question
*/
public String getQuestion() {
return question;
}
/**
* @param question
* the question to set
*/
public void setQuestion(String question) {
this.question = question;
}
/**
* @return the choices
*/
public String[] getChoices() {
return choices;
}
/**
* @param choices
* the choices to set
*/
public void setChoices(String[] choices) {
this.choices = choices;
}
/**
* @return the answer
*/
public String[] getAnswers() {
return answers;
}
/**
* @param answer
* the answer to set
*/
public void setAnswer(String[] answer) {
this.answers = answer;
}
}
Теперь, когда у вас есть класс, в котором будут храниться эти вопросы, варианты и ответы.Затем вы создадите класс для чтения, который будет читать и переносить всю эту информацию в ваш класс вопросов.Вот пример:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TextFileStuff {
public static Question[] fileAsString(String path) {
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line = br.readLine(); // get the number of questions
Question[] questionList = new Question[Integer.parseInt(line)]; // initialize the question array
String partsDelimiter = br.readLine(); // get the delimiter for the question parts
String choicesDelimiter = br.readLine(); // get the delimiter for the choices
String answersDelimiter = br.readLine(); // get the delimiter for the answers
int questionNumber = 0; // initialize the question number
while ((line = br.readLine()) != null) { // loop through the file to get the questions
if (!line.trim().isEmpty()) {
String[] questionParts = line.split(partsDelimiter); // split the line to get the parts of the
// question
String question = questionParts[0]; // get the question
String[] choices = questionParts[1].split(choicesDelimiter); // get the choices
String[] answers = questionParts[2].split(answersDelimiter); // get the answers
Question q = new Question(question, choices, answers); // declare and initialize the question
questionList[questionNumber] = q; // add the question to the question list
questionNumber++; // increment the question number
}
}
br.close();
return questionList;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Теперь, когда у вас есть все необходимые части, осталось сделать основной метод и представить этот вопрос пользователю.Вы можете сделать это так:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String path = "\\Test\\src\\res\\questions.txt"; // the path of the text file
// that contains the
// questions
Question[] questionList = TextFileStuff.fileAsString(path);
takeTheQuiz(questionList);
}
public static void takeTheQuiz(Question[] questions) {
int score = 0;
Scanner userInput = new Scanner(System.in);
for (int i = 0; i < questions.length; i++) {
System.out.print("======================");
System.out.print("Question " + (i + 1));
System.out.println("======================");
System.out.println(questions[i].getQuestion()); // Print the question
String[] choices = questions[i].getChoices(); // get the choices
for (int j = 0; j < choices.length; j++) { // loop through the choices
System.out.println(choices[j]); // Print the choices
}
System.out.print("Input an answer : "); // Print the choices
String answer = userInput.nextLine().toLowerCase();
String[] answers = questions[i].getAnswers(); // get the answers
for (int j = 0; j < answers.length; j++) { // loop through the answers
if (answer.equals(answers[j])) { // check if the user's answer is correct
score++; // increment score
}
}
}
System.out.println("You scored " + score + " out of " + questions.length);
if (score == questions.length) {
System.out.println("Cheater!");
} else if (score <= 2) {
System.out.println("You suuuuck.");
} else {
System.out.println("Mediocre performance.");
}
userInput.close();
}
}
Вот пример выходных данных программы:
======================Question 1======================
What is Java?
a. Food
b. Programming Language
c. Person
Input an answer : a
======================Question 2======================
Is this a question?
a. Yes
b. No
c. Maybe
Input an answer : v
======================Question 3======================
Are you correct?
a. Yes
b. No
c. Maybe
Input an answer : a
You scored 0 out of 3
You suuuuck.
Теперь у вас есть несколько динамичная программа вопросов и ответов.Если вы хотите добавить / удалить вопрос, вам просто нужно изменить текстовый файл.Не стесняйтесь комментировать для разъяснений и вопросов.