Multiple Choice Test Java

  • Themenstarter Themenstarter chilllord
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

chilllord

Gast
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
 
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.
 
Hatte grad nichts zu tun, hier ein simples Beispiel:

Answer.java
Code:
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
Code:
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
Code:
public class AnswerException extends Exception {

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

}

MultipleChoiceTest.java
Code:
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.
 
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.
 
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 🙁
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben