# Multiple Choice Test Java



## chilllord (19. Jan 2008)

Hallo,
ich soll fürs studium mit einem freund einen multiple choice test programmieren

wir habens uns bereits die klassen ausgedacht jedoch fehlt uns ein anfang 
wir wissen einfach nicht wie und was
also unsere klassen sind folgende

Frage | anzahlAntworten , Antwort [] Antowrt, String text | boolean antworten (?)

Antwort | String loesungText , boolean richtig |

Fragebogen | anzahlFragen , HashSet Fragen (Konstruktor: Fragebogen (Frage[] fragenpool, anzahl ) |

Fragenpool |  | main

wir sind um jede hilfe dankbar, haben bis dienstag zeit dafür nur, für dieses projekt

mfg

andre


----------



## Ralph-Uwe (19. Jan 2008)

Fragen, Antwortmöglichkeiten und die richtige Antwort sin immer fest mit einander Verknüpft.
Aus diesem Grund bietet sich eine Klasse Fragen an, die all diese Informationen beinhaltet.

Instanzen der Klasse können in einer HashMap gespeichert werden. Diese lässt sich speichern und man kann 
mittels eines Zufallsgenerator eine Frage auswählen.

Das als Vorschlag, jetzt bist Du dran.


----------



## masta // thomas (19. Jan 2008)

Hatte grad nichts zu tun, hier ein simples Beispiel:

Answer.java

```
public class Answer {

	private String answerText;
	private boolean answered;
	private boolean correct;
	
	public Answer(String answerText, boolean correct) {
		this.answerText = answerText;
		this.correct = correct;
	}
	
	public String getAnswerText() {
		return answerText;
	}
	public boolean isCorrect() {
		return correct;
	}
	public boolean isAnswered() {
		return answered;
	}

	public void setAnswered(boolean answered) {
		this.answered = answered;
	}
	
}
```

Question.java

```
import java.util.ArrayList;
import java.util.List;


public class Question {

	private List<Answer> answers;
	private String questionText;
	
	public Question()
	{
		answers = new ArrayList<Answer>();
	}
	
	public void addAnswer(Answer a)
	{
		answers.add(a);
	}
	
	public Answer getAnswer(int index)
	{
		return answers.get(index);
	}
	
	public int getAnswerCount()
	{
		return answers.size();
	}
	
	public String getQuestionText() {
		return questionText;
	}

	public void setQuestionText(String questionText) {
		this.questionText = questionText;
	}
}
```

AnswerException.java

```
public class AnswerException extends Exception {

	private static final long serialVersionUID = 1L;
	
	public AnswerException(String s) {
		super(s);
	}

}
```

MultipleChoiceTest.java

```
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);
	}
	
}
```

Ist bisschen lazy dahingeschrieben, aber so in der Richtung könntest du es aufbauen.


----------



## Guest (19. Jan 2008)

vielen dank für die beiden antworten !!! also weiss gar nicht wie ich richtig danke sagen könnte...es geht zum teil um leben und tod  programmiernote  und ich hing total...weil ich nicht so der erfahrene java typ bin

bischen lazy dahin geschrieben sieht nämlich sehr gut aus. wünschte ich hätte es so einfach geschafft  ich werde mich heute abend mal mit nem uni kollegen hinsetzen und die sachen auswerten. samstag ole  werde morgen dann bericht erstatten 

vielen dank nochmals! der fragenpool hat uns zur weissglut getrieben bisher...

ich kopiere hier nochmal einen teil unsere projektaufgabe für vielleicht aufkommende fragen vorweg 

mfg andre

Projekt:
Zur Ermittlung des Leistungsstandes in einem Informatikkurs soll ein Prüfungssystem
programmiert werden.
Hierzu sollen Multiple-Choice-Fragen als Objekte einer eigenen Klasse angelegt werden.
Diese Fragen verfügen über einen Fragenteil als geschützten Text, eine Anzahl an möglichen
Lösungen, einem Speicherfeld für die richtige Lösung und natürlich einer Punktzahl.
Außerdem verfügen die Objekte über eine Auswertemethode die in einem boolschen
Rückgabewert die korrekte Beantwortung der Frage darstellt.
In einer Applikation sollen nun eine beliebige (große) Anzahl an Fragen gespeichert werden
können und bei Bedarf mit einem Zufallsgenerator zu einer Prüfung mit genau zehn Fragen
zusammengestellt werden.


----------



## Guest (20. Jan 2008)

wie macht´man es die klasse fragebogen sich die fragen aus der klasse fragenpool holt, insgesamt 10 zufällige von 20 fragen und die wieder gibt

hilfe


----------



## Ralph-Uwe (20. Jan 2008)

wie sieht denn Dein Code jetzt aus?


----------

