Überprüfung Benutzereingabe

Schmitzi

Mitglied
Hallo zusammen,
Nach stundenlanger Suche in Google bin ich leider immer noch ratlos.
Es geht um folgendes:
Benutzer soll nur Dezimalzahlen eingeben können. Gibt er z.B. ein Wort ein kommt ein Fehler
dabei raus und er hat wieder die Eingabemöglichkeit.

Mit "try/catch" hab ich das teilweise auch geschafft aber leider liegt das ganze bei mir
in einer Schleife, sprich: entweder es entsteht eine Endlosschleife, in der immer wieder
"falsche Eingabe" ausgegeben wird oder ich baue ein "break;" ein (was aber ja leider das Programm beendet).
Mit Continue ging es ebenfalls nicht.

Hoffe ich hab es einigermaßen verständlich erklärt und danke schonmal.
MfG,
Schmitzi
 
musst halt in der schleife einlesen

edit: am besten zeigst du mal deinen Code. dann kann man das auch besser beurteilen 🙂
 
Java:
import java.util.Scanner;
import java.util.Random;
import static java.lang.System.out;
import static java.lang.System.in;

public final class Rechner1 {
    private Rechner1() { }
    private static final Scanner EINGABE = new Scanner(in);
    public static void main(final String[] args) {
        //----------------------------------------- Aufgabenstellung ausgeben
        out.println("Dezimaldarstellung der Hexadezimalzahl eingeben "
                    + "(Strg-D fuer Ende):");

        //---------------------------- Zufallszahlengenerator initialisieren
        Random wuerfel = new Random();
        final int maxRandom = 99; // nur Zahlen zwischen 0 und 99

        //------------------------------------ Variablen fuer die Auswertung

        int treffer = 0; //------------------- Variable fuer richtige Eingaben
        int nieten  = 0; //------------------- Variable fuer falsche Eingaben
        final int mindestergebnisse = 4; //--- Konstante fuer Mindestergebnisse

        while (true) {
            //---------------------------------------------- Aufgabe stellen
            int ausgabe = wuerfel.nextInt(maxRandom + 1);
            out.printf("hexadezimal %x  = dezimal ", ausgabe);

            //------------------------------------------------ Eingabe lesen
            if (!EINGABE.hasNext()) {
                break; // break beendet die Schleife
            }

// __ Um diesen Teil geht es

            int eingabe = EINGABE.nextInt(); // Eingabe in Variable schreiben

            //---------------------------------------------- Eingabe pruefen

                if (eingabe == ausgabe) {
                    // Eingabe ist korrekt
                    out.println("Richtig!");
                    treffer = treffer + 1; // Zaehler richtige Ergebnisse +1
                } else {
                    // Eingabe ist nicht korrekt
					out.println("Eingabe: " + eingabe);
                    out.println("Falsch! (Richtig: " + ausgabe + ")");
                    nieten = nieten + 1;  // Zaehler falsche Ergebnisse +1
                }
        }
// __ Um diesen Teil geht es

        //------------------------------------------------------- Auswertung

        // Menge richtiger und falscher Eingaben ausgeben
        out.println("\n" + treffer + " richtige Eingabe(n)");
        out.println(nieten + " falsche Eingabe(n)");


        // Ermitteln der Anzahl aller Eingaben
        int ergebnisse = treffer + nieten;
        /* Pruefen ob es min. 4 Eingaben waren und davon
        mindestens die Haelfte richtig.*/
        boolean voraussetzunga = ergebnisse >= mindestergebnisse;
        boolean voraussetzungb = treffer >= nieten;
        if (voraussetzunga && voraussetzungb) {
                // Ausgabe wenn der Test bestanden wurde
                out.println("Bestanden!");
        } else {
                // Ausgabe wenn der test nicht bestanden wurde
                out.println("Nicht bestanden!");
        }
    }
}

So, bitte 🙂
 
Mach es nicht
Code:
while(true)
sondern
Code:
while(!richtigeEingabe)
und setze es erst auf true, wenn da wirklich nur Zahlen eingegeben wurden sind.

P.S. Wozu hast du solche Sachen wie
Code:
private static
?
 
sowas find ich eh immer unschön mit diesen dauerschleifen und eingaben. Mir fällt da immer nur sowas ein (auch schon ewig nicht mehr gemacht):

Java:
public class Rechner {

	private static Scanner scn = new Scanner(System.in);

	public static void main(final String[] args) {
		System.out.println("Dezimaldarstellung der Hexadezimalzahl eingeben (exit fuer Ende):");
		Random wuerfel = new Random();
		int treffer = 0;
		int nieten  = 0;
		
		int hexa = wuerfel.nextInt(99 + 1);
		System.out.printf("hexadezimal %x  = dezimal ", hexa);
		String eingabe = getNextVaildInput(hexa);
		while (!eingabe.equals("exit")) {
			int dec = Integer.parseInt(eingabe);
			if (dec == hexa) {
				System.out.println("Richtig!");
				treffer++;
			} else {
				System.out.println("Eingabe: " + eingabe);
				System.out.println("Falsch! (Richtig: " + hexa + ")");
				nieten++;
			}
			hexa = wuerfel.nextInt(99 + 1);
			System.out.printf("hexadezimal %x  = dezimal ", hexa);
			eingabe = getNextVaildInput(hexa);
		}
	}

	private static String getNextVaildInput(int hexa) {
		String eingabe = scn.next();
		while (!eingabe.matches("[0-9]+") && !eingabe.equals("exit")) {
			System.out.println("Fehlerhafte Eingabe. Bitte wiederholen!");
			System.out.printf("hexadezimal %x  = dezimal ", hexa);
			eingabe = scn.next();
		}
		return eingabe;
	}
}

hab die variablen weng umbenannt und rausgeschmissen, was ich grad net gebraucht hab. kannste ja wieder reinnehmen bzw den code umschreiben.
 
Gut das hab ich soweit verstanden und es klappt auch wie gewollt also danke nochmal 🙂.
Was mir jetzt noch fehlt ist das Auffang der Eingabe Strg+C. Dabei entsteht nämlich
immer so eine unschöne Fehlermeldung "Exception in thread main".
Hat jemand einen Tipp unter welchem Thema ich das im Manual finde?

MfG,
Schmitzi
 

Zurück
Oben