import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MultipleChoiceTest {
private int position;
private List<Question> questions;
public MultipleChoiceTest()
{
position = 0;
questions = new ArrayList<Question>();
generateSomeQuestions();
}
public boolean hasNextQuestion()
{
return position < questions.size();
}
public Question getNextQuestion()
{
if(!hasNextQuestion())
return null;
return questions.get(position++);
}
private Question getCurrentQuestion()
{
if(position <= 0)
return questions.get(position);
return questions.get(position - 1);
}
public boolean makeAnswer(String answer) throws AnswerException
{
boolean answered = false;
Answer currentAnswer = null;
for(String s : answer.split(","))
{
try
{
currentAnswer = getCurrentQuestion().getAnswer(Integer.valueOf(s.trim())-1);
currentAnswer.setAnswered(true);
answered = currentAnswer.isCorrect();
} catch(NumberFormatException e) {
throw new AnswerException("Falsche Eingabe.");
} catch(IndexOutOfBoundsException ie) {
throw new AnswerException("Diese Antwortmöglichkeit existiert nicht.");
}
}
return answered;
}
public void startTest()
{
Scanner scanner = new Scanner(System.in);
Question q;
String answerInput;
boolean answerCorrect = false;
boolean inputOk = false;
int rightAnswers = 0;
int wrongAnswers = 0;
while(hasNextQuestion())
{
q = getNextQuestion();
System.out.println(q.getQuestionText());
for(int i = 0; i < q.getAnswerCount(); i++)
System.out.println("Antwort " + (i+1) + ": " + q.getAnswer(i).getAnswerText());
System.out.println("Es können auch mehrere Antworten richtig sein. Bitte mit , trennen.");
System.out.print("Deine Antwort: ");
do
{
answerInput = scanner.next();
try {
answerCorrect = makeAnswer(answerInput);
inputOk = true;
} catch (AnswerException e) {
System.out.println(e.getMessage());
inputOk = false;
}
} while(!inputOk);
if(answerCorrect)
{
System.out.println("Richtig!");
rightAnswers++;
}
else
{
System.out.println("Falsch");
wrongAnswers++;
}
System.out.println();
}
System.out.println("Testergebnis - von " + (rightAnswers + wrongAnswers) + " Fragen hast du " + rightAnswers + " richtig beantwortet!");
}
public static void main(String[] args) {
new MultipleChoiceTest().startTest();
}
private void generateSomeQuestions()
{
Question q = new Question();
q.setQuestionText("Wieviel ist 1+2?");
q.addAnswer(new Answer("6", false));
q.addAnswer(new Answer("4", false));
q.addAnswer(new Answer("3", true));
questions.add(q);
q = new Question();
q.setQuestionText("Wie lautet mein Name?");
q.addAnswer(new Answer("MultipleChoiceText", false));
q.addAnswer(new Answer("MultipleChoiceTest", true));
q.addAnswer(new Answer("ich habe keine Namen", false));
questions.add(q);
q = new Question();
q.setQuestionText("Was davon ist grün?");
q.addAnswer(new Answer("Gras", true));
q.addAnswer(new Answer("Kunstrasen", true));
q.addAnswer(new Answer("Füße", false));
questions.add(q);
}
}