Java Academy · Lektion

Validér brugerinput

Håndtér ugyldigt input på en robust måde

Lektion 3 af 413 trin

Validér brugerinput er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Stol aldrig på inddata

Brugere indtaster forkerte ting: bogstaver, hvor der forventes tal, tomme felter eller værdier uden for intervallet. Robuste programmer validerer inddata og spørger igen i stedet for at gå ned.

Denne lektion viser mønstre til elegant validering med Scanner.

Kontrollér før læsning

Den enkleste beskyttelse er hasNextInt(). Læs kun heltallet, når der faktisk er et tilgængeligt heltal.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42");
        if (scanner.hasNextInt()) {
            System.out.println("Got: " + scanner.nextInt());
        } else {
            System.out.println("Please enter a number");
        }
        scanner.close();
    }
}

Gentag, indtil værdien er gyldig

En løkke med nye forsøg bliver ved med at spørge, indtil der kommer et gyldigt heltal. Når tokenet er forkert, skal du kassere det med next() og fortsætte.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc xyz 50");
        int value = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                value = scanner.nextInt();
                break;
            }
            scanner.next();
        }
        System.out.println("Accepted: " + value);
        scanner.close();
    }
}

Kontrol af interval

Ud over typen skal værdier ofte ligge inden for et bestemt interval. Læs tallet, og kontrollér det derefter, før du accepterer det.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("7");
        int n = scanner.nextInt();
        if (n >= 1 && n <= 10) {
            System.out.println("Valid: " + n);
        } else {
            System.out.println("Out of range");
        }
        scanner.close();
    }
}

Try-catch ved parsing

Et alternativ er at læse en hel linje og derefter parse den, mens du fanger NumberFormatException for ugyldig tekst. Det holder bufferen enkel.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("notanumber");
        String line = scanner.nextLine();
        try {
            int n = Integer.parseInt(line.trim());
            System.out.println("Parsed: " + n);
        } catch (NumberFormatException e) {
            System.out.println("Invalid number: " + line);
        }
        scanner.close();
    }
}

Validering af ikke-tom tekst

Afvis tom tekst. isBlank() returnerer true for tomme strenge eller strenge, der kun består af blanktegn.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("   ");
        String name = scanner.nextLine();
        if (name.isBlank()) {
            System.out.println("Name cannot be empty");
        } else {
            System.out.println("Hello, " + name);
        }
        scanner.close();
    }
}

Validering af et valg

Ved menuvalg skal du kontrollere, at værdien er en af de tilladte muligheder, før du handler på den.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("y");
        String choice = scanner.next().toLowerCase();
        if (choice.equals("y") || choice.equals("n")) {
            System.out.println("You chose: " + choice);
        } else {
            System.out.println("Please enter y or n");
        }
        scanner.close();
    }
}

En genanvendelig validator-metode

Udtræk valideringen til en metode, så logikken kan genbruges. Her kontrollerer en metode, at en alder ligger inden for et fornuftigt interval.

public class Main {
    static boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    public static void main(String[] args) {
        System.out.println(isValidAge(30));
        System.out.println(isValidAge(-5));
    }
}

Kombination af type og interval

Virkelig validering kombinerer ofte et typetjek, et intervaltjek og en løkke med nye forsøg i én robust rutine.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc 200 45");
        int valid = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                int n = scanner.nextInt();
                if (n >= 1 && n <= 100) {
                    valid = n;
                    break;
                }
            } else {
                scanner.next();
            }
        }
        System.out.println("Final: " + valid);
        scanner.close();
    }
}

Tydelige fejlmeddelelser

God validering giver også brugeren nyttig feedback. Fortæl præcis, hvad der var forkert, og hvad der forventes, i stedet for blot at angive en generel fejl.

public class Main {
    static String validate(String input) {
        if (input.isBlank()) return "Input is empty";
        if (!input.matches("\\d+")) return "Only digits allowed";
        return "OK";
    }

    public static void main(String[] args) {
        System.out.println(validate(""));
        System.out.println(validate("12a"));
        System.out.println(validate("123"));
    }
}

Valideringsstrategi

Kontrollér typen med familien af hasNext-metoder eller med try-catch, kontrollér interval og tom tekst, gentag indtil værdien er gyldig, og forklar altid fejl tydeligt.

Hurtig kontrol

Afprøv din viden om validering af inddata.

Opsamling

Du har lært at validere inddata på en elegant måde:

  • Beskyt læsningen med hasNextInt, eller parse inden i try-catch
  • Brug løkker med nye forsøg, og kassér ugyldige tokens med next()
  • Kontrollér intervaller, og afvis tom tekst med isBlank
  • Udtræk genanvendelige validator-metoder
  • Giv tydelige og specifikke fejlmeddelelser
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Validér brugerinput” gratis?

Ja — hele teksten til “Validér brugerinput” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Validér brugerinput”?

Håndtér ugyldigt input på en robust måde Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Validér brugerinput”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Læs input med Scanner
  2. Læs tal og linjer
  3. Validér brugerinput
  4. BufferedReader som alternativ
← Tilbage til Java Academy