Prosjekt: Geografi-Quiz
I dette prosjektet lærer du å lage et interaktivt program med dialogbokser, logikk og tekst-rensing.
Sentrale konsepter
JOptionPane
Vi bruker showMessageDialog for beskjeder og
showInputDialog for spørsmål.
Strenger og Heltall
Vi bruker String for tekst og int
for å telle poeng med poeng++.
Rensing
Vi bruker .trim() og
toLowerCase() for å godta svar med småfeil.
Gjenbruk
Vi lager en egen metode for å rydde tekst, så vi slipper å skrive koden mange ganger.
Bygg programmet steg for steg
1Importer bibliotekene
Først må vi fortelle Java at vi skal bruke ferdige verktøy for vinduer (JOptionPane) og systemet (System).
import static java.lang.System.*;
import static javax.swing.JOptionPane.*;
public class GeografiQuiz {
public static void main(String[] args) {
2Håndter brukerens navn
Vi henter navnet og bruker .trim() for å fjerne tomrom. Hvis
navnet er tomt, setter vi det til "ukjent".
String navn = showInputDialog(null, "Hva heter du?");
if (navn == null) return; // Avslutter hvis bruker trykker avbryt
navn = navn.trim();
if (navn.isEmpty()) navn = "ukjent";
showMessageDialog(null, "Hei, " + navn + "! Lykke til!");
int poeng = 0;
3Lag en egen metode for "vasking" av tekst
I stedet for å skrive toLowerCase() og trim() på
hvert eneste spørsmål, lager vi en metode utenfor main-delen. Denne metoden tar
imot en tekst, rydder den, og sender den tilbake.
// Denne plasseres nederst i klassen, før den siste krøllparentesen
private static String normaliserTekst(String tekst) {
return tekst.trim()
.toLowerCase()
.replace("-", " ") // Bytter bindestrek med mellomrom
.replaceAll("\\s+", " "); // Fjerner doble mellomrom
}
4Stille spørsmål og bruke metoden
Nå kan vi bruke metoden vår til å sjekke om svarene er riktige, uansett hvordan brukeren skriver det.
String svar = showInputDialog(null, "Hvilket kontinent ligger Brasil på?");
// Vi sender 'svar' inn i metoden vår før vi sammenligner med "sør amerika"
if (svar != null && normaliserTekst(svar).equals("sør amerika")) {
showMessageDialog(null, "Riktig!");
poeng++;
}
5Test metoden før du spiller quizen
En test er en liten sjekk av at koden gir svaret vi forventer. Her tester vi bare
normaliserTekst-metoden, fordi den er lett å kontrollere uten at vi må klikke oss
gjennom hele quizen.
// Legg dette tidlig i main mens du jobber med metoden:
System.out.println("Fjerner mellomrom: "
+ normaliserTekst(" Oslo ").equals("oslo"));
System.out.println("Bytter bindestrek: "
+ normaliserTekst("Sør-Amerika").equals("sør amerika"));
System.out.println("Rydder doble mellomrom: "
+ normaliserTekst("sør amerika").equals("sør amerika"));
true tre ganger i terminalen. Hvis én linje skriver
false, vet du nøyaktig hvilken regel du må rette.
Forslag til fasit:
import static java.lang.System.*;
import static javax.swing.JOptionPane.*;
public class GeografiQuiz {
public static void main(String[] args) {
// Valgfritt mens du utvikler: sjekk hjelpemetoden før quizen starter.
// testNormaliserTekst();
showMessageDialog(null, "Velkommen til geografi-quizen!");
// Spør om navn og rydd teksten
String navn = showInputDialog(null, "Hva heter du?");
if (navn == null) return;
navn = navn.trim();
if (navn.isEmpty()) navn = "ukjent";
showMessageDialog(null, "Hei, " + navn + "! Lykke til!");
int poeng = 0; // Holder styr på antall rette svar
// --- Spørsmål 1 ---
String svar = showInputDialog(null, "Hva er hovedstaden i Frankrike?");
if (svar != null && svar.trim().equalsIgnoreCase("paris")) {
showMessageDialog(null, "Riktig!");
poeng++;
} else {
showMessageDialog(null, "Feil! Riktig svar er Paris.");
}
// --- Spørsmål 2 (bruker normaliserTekst-metoden) ---
svar = showInputDialog(null, "Hvilket kontinent ligger Brasil på?");
if (svar != null && normaliserTekst(svar).equals("sør amerika")) {
showMessageDialog(null, "Riktig!");
poeng++;
} else {
showMessageDialog(null, "Feil! Riktig svar er Sør-Amerika.");
}
// --- Spørsmål 3 ---
svar = showInputDialog(null, "Hva heter verdens største hav?");
if (svar != null && normaliserTekst(svar).equals("stillehavet")) {
showMessageDialog(null, "Riktig!");
poeng++;
} else {
showMessageDialog(null, "Feil! Riktig svar er Stillehavet.");
}
// Avslutning
showMessageDialog(null, "Du fikk " + poeng + " poeng.");
showMessageDialog(null, "Takk for at du spilte, " + navn + "!");
// Skriver poengsummen til terminalen til slutt
out.println("Quiz ferdig. Poeng: " + poeng);
}
private static void testNormaliserTekst() {
out.println("--- Tester normaliserTekst ---");
out.println("Fjerner mellomrom: "
+ normaliserTekst(" Oslo ").equals("oslo"));
out.println("Bytter bindestrek: "
+ normaliserTekst("Sør-Amerika").equals("sør amerika"));
out.println("Rydder doble mellomrom: "
+ normaliserTekst("sør amerika").equals("sør amerika"));
}
/**
* En hjelpemetode som gjør tekst sammenlignbar ved å:
* 1. Fjerne mellomrom foran/bak
* 2. Gjøre alt til små bokstaver
* 3. Bytte ut bindestreker med mellomrom
*/
private static String normaliserTekst(String tekst) {
return tekst.trim()
.toLowerCase()
.replace("-", " ")
.replaceAll("\\s+", " ");
}
}