← Tilbake

Prosjekt: Geografi-Quiz

I dette prosjektet lærer du å lage et interaktivt program med dialogbokser, logikk og tekst-rensing.

Sentrale konsepter

Input/Output

JOptionPane

Vi bruker showMessageDialog for beskjeder og showInputDialog for spørsmål.

Variabler

Strenger og Heltall

Vi bruker String for tekst og int for å telle poeng med poeng++.

Tekst

Rensing

Vi bruker .trim() og toLowerCase() for å godta svar med småfeil.

Metoder

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++;
        }

Forslag til fasit:

import static java.lang.System.*;
import static javax.swing.JOptionPane.*;

public class GeografiQuiz {

    public static void main(String[] args) {

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

    /**
     * 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+", " ");
    }
}