falsche Eingabe abfangen

Diskutiere falsche Eingabe abfangen im Java Basics - Anfänger-Themen Bereich.
K

Kevinpaolo

import java.util.Scanner;
import java.util.Random;

public class Aufgabe7TeilB {
public static void main(String[] args) {
System.out.println("Bitt denken Sie sich eine Zahl aus!");
Scanner Scanner = new Scanner(System.in);
System.out.println("Bitte geben Sie eine untere Grenze ein: ");
int A = Integer.parseInt(Scanner.nextLine());
System.out.println("Bitte geben Sie eine obere Grenze ein: ");
int B = Scanner.nextInt();
int i = 0;
while (B >= A) {
i++;
Random generator = new Random();
int zufallszahl = A + generator.nextInt(B - A + 1);
System.out.println("Ihre Zahl könnte lauten: " + zufallszahl);
System.out.println("Bitte geben sie entweder >richtig< ein, falls ich ihre Zahl gefunden habe und sonst " +
">zu klein<, falls ihre Zahl größer ist oder >zu groß<, falls ihre Zahl kleiner ist: ");

Scanner sr = new Scanner(System.in);

String C = sr.nextLine();


if (C.equals("richtig")) {
System.out.println("Ihre Zahl lautet: " + zufallszahl + " Ich habe genau " + i + " Versuch/e gebraucht um ihre " +
"Zahl zu erraten.");
break;
} else if (C.equals("zu klein")) {
A = zufallszahl;


} else if (C.equals("zu groß")) {
B = zufallszahl;


} else {
System.out.println("Ihre Eingabe konnte leider nicht registriert werden.");
}


}
}
}




Hallo,
ich habe eine Frage und zwar wie ich in diesen Code die Bedingung reinschreiben kann, dass falls in der Antwort ob es zu klein, zu groß oder richtig ist zum Beispiel eine falsche Antwortmöglichkeit (z.B falsch)abgefangen wird.
 
K

Kevinpaolo

weil wenn ich bei diesem code zum Beispiel mit falsch antworte ignoriert er es einfach und schlägt eine neue zufallszahl vor
 
K

Kevinpaolo

switch hatte ich schon als thema aber finde mich leider noch nicht so richtig zurecht damit
 
T

temi

Java:
public class Aufgabe7TeilB {
    public static void main(String[] args) {
        System.out.println("Bitt denken Sie sich eine Zahl aus!");
        Scanner Scanner = new Scanner(System.in); // das sollte nicht kompilieren, weil die Variable so heißt, wie die Klasse
        System.out.println("Bitte geben Sie eine untere Grenze ein: ");
        int A = Integer.parseInt(Scanner.nextLine());
        System.out.println("Bitte geben Sie eine obere Grenze ein: ");
        int B = Scanner.nextInt();
        int i = 0;
        while (B >= A) {
            i++;
            Random generator = new Random();
            int zufallszahl = A + generator.nextInt(B - A + 1);
            System.out.println("Ihre Zahl könnte lauten: " + zufallszahl);
            System.out.println("Bitte geben sie entweder >richtig< ein, falls ich ihre Zahl gefunden habe und sonst " +
                ">zu klein<, falls ihre Zahl größer ist oder >zu groß<, falls ihre Zahl kleiner ist: ");

            Scanner sr = new Scanner(System.in); // den Scanner brauchst du nicht, du hast schon einen von weiter oben...

            String C = sr.nextLine();


            if (C.equals("richtig")) {
                System.out.println("Ihre Zahl lautet: " + zufallszahl + " Ich habe genau " + i + " Versuch/e gebraucht um ihre " +
                    "Zahl zu erraten.");
                break;
            } else if (C.equals("zu klein")) {
                A = zufallszahl;
            } else if (C.equals("zu groß")) {
                B = zufallszahl;
            } else {
                System.out.println("Ihre Eingabe konnte leider nicht registriert werden.");
            }
        }
    }
}
Bitte gewöhne dir bereits jetzt die Code-Konventionen von Java an. Variablennamen beginnen mit einem Kleinbuchstaben, z.B. Scanner scanner = new Scanner(System.in);

Du brauchst auch nur einen Scanner deklarieren, den kannst du später "wiederverwenden"
 
M

M.L.

Mit einer kleinen Umstellung in den if-Anweisungen funktioniert es einigermassen (z.B. fehlt eine Kontrolle, welche Zahlen der Nutzer schon eingegeben hat, welche schon erfolglos abgefragt wurden oder ob Obergrenze > Untergrenze ist):
Java:
String C = sr.nextLine();
if
    /*} else if*/ (C.equals("zu klein")) {
        A = zufallszahl;


    } else if (C.equals("zu groß")) {
    B = zufallszahl;

} else if (C.equals("richtig")) {
        System.out.println("Ihre Zahl lautet: " + zufallszahl + " Ich habe genau " + i + " Versuch/e gebraucht um ihre " +
                "Zahl zu erraten.");
        break;
} else {
    System.out.println("Ihre Eingabe konnte leider nicht registriert werden.");
}
 
MoxxiManagarm

MoxxiManagarm

z.B. fehlt eine Kontrolle, welche Zahlen der Nutzer schon eingegeben hat, welche schon erfolglos abgefragt wurden
Nein fehlt nicht. Weil
a) Der Computer errät die Zahlen, nicht andersherum wie sonst für diese Aufgabe üblich. Ich habe das Gefühl du hast dich davon irritieren lassen ;)
b) Er setzt die Grenzen A und B neu, welche für die Generierung der neuen Zufallszahl (nächster Rateversuch Computer) verwendet werden. Dadurch wird die neue Zahl in einem neuen Bereich liegen.

Ergänzung zu b: Die Implementierung dazu hat noch einen kleinen Haken. Wenn z.B. "zu klein" geraten wurde, dann ist die untere Grenze wieder die geratene Zahl, d.h. aktuell kann diese Zahl theoretisch erneut auftauchen. Die neue untere Grenze sollte also die geratene Zahl + 1 sein. Äquivalentes gilt auch für eine zu groß geratene Zahl.
 
M

M.L.

irritieren lassen
Das kann man natürlich nicht ausschliessen.... Beim Ausführen des Programms kann man die Untergrenze z.B. auf 5 und die Obergenze auf 6 setzen. Während 5 "zu klein" ist, ist 6 (spasseshalber) "zu groß". Das Programm arbeitet dann solange, bis "richtig" eingegeben wurde (deswegen sollte ja auch eine Zwischenspeicherung der ermittelten Werte erfolgen und weitere Abbruchbedingungen eingefügt werden )
 
MoxxiManagarm

MoxxiManagarm

Das Programm arbeitet dann solange, bis "richtig" eingegeben wurde
Es arbeitet auch solange wie B (obere Grenze) größer und gleich A (untere Grenze) ist. Die Bennenung A und B helfen hier zugegebener Maßen auch nicht zum Veständnis! Besser wären namen wie "lower" und "upper". Eigentlich braucht er im Fall von "richtig" ein Beenden des Programmes anstatt einem break. Dann kann er nach der Schleife eine Ausgabe setzen wie z.B.

Java:
System.out.println("Du willst mich doch verarschen!");
Diese Ausgabe kommt dann nur, wenn die Schleifenbedingung verletzt wurde, also dieser Spaß-Fall eingetreten ist.
 
Zuletzt bearbeitet:
Thema: 

falsche Eingabe abfangen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben