Я пытаюсь сделать программу викторины в java, используя netbeans для школьного проекта. У меня около 40 вопросов и их нужно хранить в двухмерном массиве. String qna[][]=new String[40][5];\\ for the question and each of the four options which will be displayed on 4 toggle buttons
Моя проблема заключается в том, что я должен набирать большое количество кода для загрузки каждого вопроса и его «четырех вариантов, и это сложно, когда мне нужно редактировать квесты.
Есть ли более эффективный способ сделать это (например, с использованием текстового документа или чего-то еще в другом месте)?Хранение многих строк в двумерном массиве String
ответ
Вы не должны использовать 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];
}
И вы можете добавить, что в конструктор, как хорошо!
EDIT:
Вы можете также поместить 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
OP, кстати, если вы действительно хотите более простую реализацию, просто объявите кучу переменных в классе. В принципе, нет геттеров, нет конструкторов и нет инкапсуляции. Это проще, но плохая практика. Выбирай с умом! – Sweeper
Я добавил некоторую информацию о том, как сохранить вещь в файле для реализации _late binding_. Таким образом, программе не нужно инициализировать все 40 вопросов с помощью конструктора. Он может просто прочитать их из файла. Однако файл находится в двоичном формате, поэтому не пытайтесь его редактировать! – Sweeper
Вместо использования мути-мерных массивов создайте класс QnA для хранения вопросов и соответствующих вариантов ответа.
class QnA {
String question;
String[] answer_options;
}
магазин ваши вопросы (и соответствующие ответы) в формате JSON (текстовый файл)
[ { "вопрос": "Как ты", "answer_options": [ "Bad", " OK», "ХОРОШО"] }, { "вопрос": "Какого цвета небо", "answer_options": [ "Синий", "Зеленый", "Красный"] } ]
Используя этот файл popul съели и массив объектов QnA, таких как QnA[] Qestions
.
Существует много libraries to parse json.
Как о создании класса Вопроса, который хранит вопрос и все эти ответы?
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
}
Тогда вы могли бы создать класс, который считывает из текстового файла и создает список всех вопросов, используя BufferedReader так:
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;
}
}
Она считывает из файла структурированные как
Q::What is the meaning of life?
A::42
A::33
A::pi
A::all of the above
Q::What?
A::Nothing
A::Something
Просто отдельные вопросы друг от друга по новой линии. Таким образом, вам не нужно будет менять код, если вам потребуется произвольное количество вопросов или ответов. Это может быть не самый эффективный, но мне удобнее работать со списками, чем с массивами.
- 1. Сохранение строк в двумерном массиве
- 2. Хранение данных в двумерном массиве из infile
- 3. Javascript split string в двумерном массиве
- 4. Хранение строк в массиве
- 5. Нарезка массив строк в двумерном массиве символов
- 6. Взятие пространственных разделенных строк в двумерном массиве
- 7. найти количество строк в двумерном массиве знаков
- 8. Хранение вложенного выходного цикла FOR в двумерном массиве в python
- 9. Хранение строк в оборванном массиве
- 10. петель в двумерном массиве
- 11. Найти строку в двумерном массиве
- 12. Указатели в двумерном массиве
- 13. Оставшаяся пробел в двумерном массиве
- 14. конкатенации столбцов в двумерном массиве
- 15. memcpy на двумерном массиве
- 16. преобразовать двумерный массив строк в двумерном массиве Int
- 17. Поиск значений в двумерном массиве
- 18. Ошибка в двумерном массиве C++
- 19. Как найти определенную строку в двумерном массиве строк?
- 20. Как создать объект для каждой строки в двумерном массиве строк
- 21. удаление последнего символа из строк в двумерном массиве
- 22. Кроссовер на двумерном массиве?
- 23. json_encode на двумерном массиве
- 24. Как искать в двумерном массиве
- 25. отфильтровывая значения в двумерном массиве
- 26. Для контура в двумерном массиве
- 27. Поиск соседей в двумерном массиве
- 28. Выравнивание Char в двумерном массиве
- 29. Случайный в двумерном массиве нулей
- 30. Вставить структура в двумерном массиве
Вы можете просто сохранить каждый 'question' и' options' в текстовом файле (специально отформатированном) и прочитать его оттуда. – 3kings
Почему бы вам не создать класс со строкой вопросов и 4 параметрами. Затем вы можете создать массив объектов этого класса. – Atri
@ 3kings, как я могу это сделать? –