De bedoeling is een programma te schrijven dat de gebruiker toelaat om een kleine quiz te spelen.
Maak een nieuw project aan met als naam Quiz en voeg volgende items toe:
Net zoals de klasse OpenQuizVraag implementeert de klasse MeerkeuzeQuizVraag de interface IQuizVraag. De klasse MeerkeuzeQuizVraag heeft volgende attributen/methoden:
De klasse Quizdie eveneens het bijhorende hoofdprogramma bevat, vind je hieronder terug. Probeer de code zoveel mogelijk te begrijpen implementeer de methode verwerkBestand, zodat het hoofdprogramma kan worden uitgevoerd.
package quiz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Quiz {
private ArrayList<IQuizVraag> vragenlijst;
public Quiz() throws FileNotFoundException {
vragenlijst = new ArrayList<>();
verwerkBestand();
}
private void verwerkBestand() throws FileNotFoundException {
...
}
public IQuizVraag getQuizVraag() {
Random r = new Random();
return vragenlijst.get(r.nextInt(vragenlijst.size()));
}
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(System.in);
Quiz q = new Quiz();
for (int i = 0; i < 10; i++) {
IQuizVraag vraag = q.getQuizVraag();
System.out.println("Bereken "+ vraag.getOpgave()+ "?");
if (vraag instanceof MeerkeuzeQuizVraag) {
MeerkeuzeQuizVraag mVraag = (MeerkeuzeQuizVraag) vraag;
for (int j = 0; j < mVraag.getKeuzes().length; j++) {
System.out.println("\t" + j +" "+ mVraag.getKeuzes()[j]+" ");
}
}
String antwoord = sc.next();
if (vraag.controleer(antwoord)) {
System.out.println("Prima!");
} else {
System.out.println("Fout! Het antwoord is " + vraag.getAntwoord());
}
}
}
}
Zoals je kan zien wordt in de constructor van de klasse Quiz de methode verwerkBestand() aangeroepen. In de methode verwerkBestand() moet het bestand rekensommen.txt verwerkt worden. Iedere lijn van het bestand bevat een vraag. Het eerste veld is ofwel "OV" of "MV" afhankelijk of het een open vraag dan wel een meerkeuzevraag betreft. Het tweede veld is de vraag zelf en het derde veld het (correcte) antwoord op die vraag. Enkel voor meerkeuzevragen volgen er nog vier velden, drie foute antwoorden en het juiste antwoord op de vraag. De bedoeling is om deze vier velden als mogelijke antwoorden aan de gebruiker te tonen.
Lees in de methode verwerkBestand() het bestand lijn per lijn in en plaats alle (meerkeuze)vragen in de ArrayList vragenlijst.
Het hoofdprogramma stelt de gebruiker tien vragen, openvragen en meerkeuzevragen door mekaar. Na het ingeven van het antwoord wordt telkens aangegeven of de gestelde vraag juist dan wel fout werd beantwoord. Wanneer het om een
meerkeuzevraag gaat worden vier mogelijke antwoorden getoond waarvan er maar één juist kan zijn. De gebruiker geeft zijn keuze d.m.v. het cijfer dat naast het mogelijke antwoord staat.