-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserInput
More file actions
86 lines (70 loc) · 2.72 KB
/
UserInput
File metadata and controls
86 lines (70 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Läs giltigt namn (repeterar tills input är acceptabel)
String name = readValidName(scanner);
// Läs giltig ålder (repeterar tills input är acceptabel)
int age = readValidAge(scanner);
System.out.println();
System.out.println("Välkommen, " + name + "! Du är " + age + " år gammal.");
scanner.close();
}
/**
* Läser in och returnerar ett giltigt namn.
* Regler:
* - Minst 2 tecken (exklusive ledande/slutande mellanslag)
* - Får innehålla bokstäver (inkl. åäö/ÅÄÖ), mellanslag och bindestreck
* - Får ej innehålla siffror eller andra specialtecken
*/
public static String readValidName(Scanner scanner) {
String name;
// Regex: minst 2 bokstäver i början, ev. fler ord med bindestreck/mellanslag
String nameRegex = "^[a-zA-ZåäöÅÄÖ]{2,}([\\s-][a-zA-ZåäöÅÄÖ]+)*$";
while (true) {
System.out.print("Ange ditt namn: ");
name = scanner.nextLine().trim(); // ta bort ledande/slutande mellanslag
// Kontrollera mot regexen
if (!name.matches(nameRegex)) {
System.out.println("Ogiltig inmatning. Namn måste vara minst 2 bokstäver och får endast innehålla bokstäver, mellanslag eller bindestreck.");
continue;
}
// Om allt ok, bryt loopen
break;
}
return name; // Efter att korrekt namn har angivits, kan vi breaka ur loopen och returnera namnet som skrevs in.
}
/**
* Läser in och returnerar en giltig ålder som int.
* Regler:
* - Endast siffror tillåtna
* - Konverteras till int och kontrolleras mot rimligt intervall (0-120)
* - Repeterar tills giltig input
*/
public static int readValidAge(Scanner scanner) {
String ageInput;
int age;
while (true) {
System.out.print("Ange din ålder: ");
ageInput = scanner.nextLine().trim();
// Kontroll: endast siffror (minst en siffra)
if (!ageInput.matches("[0-9]+")) {
System.out.println("Ogiltig inmatning. Ange endast siffror (t.ex. 25).");
continue;
}
// Försök omvandla till int med felhantering för säkerhet
try {
age = Integer.parseInt(ageInput);
} catch (NumberFormatException e) {
// Skydd mot extremt stora tal som inte får plats i int
System.out.println("Talet är för stort. Ange en rimlig ålder.");
continue;
}
// Kontrollera rimligt intervall
if (age < 0 || age > 120) {
System.out.println("Ogiltig ålder. Ange en ålder mellan 0 och 120.");
continue;
}
// Om allt ok: bryt loopen
break;
}
return age;
}