Input/Output Eine Zahl eingeben mit Ausnahmen

M

Mindblaster

Gast
Hallo, ich muss über die Ferien ein Programm schreiben und bin nun auf ein Problem gestüzt.

In meinem Program soll man eine Zahl größer/gleich 5 eingeben. Wenn man eine kleinere Zahl oder einen Buchstaben eingibt soll das Programm etwas auf der Konsole ausgeben und man soll dann die Möglichkeit haben wieder etwas einzugeben. Dies soll geschehen bis man etwas >= 5 eingibt.

Nun habe ich folgenden Code geschrieben:
Java:
 import java.util.InputMismatchException;
import java.util.Scanner;

public class Gameboard {
	public static void main(String args[]){
		int size = 9;
		Scanner s = new Scanner(System.in);
		do {
			System.out.println("Gib die GrцЯe des Spielbretts an (grцЯer als 5)!");
			try {
				s.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("Gib mal normale Zahl ein!");
				}
			
			} while (!(s.hasNextInt()) || s.nextInt() < 5);
		size = s.nextInt();
		System.out.println(size);
	}
}

Habe keine Ahnung wieso der Zyklus, wenn ich was falsches eingebe mir nicht wieder die Möglichkeit gibt etwas einzutippen...Oder muss ich das mit switch cas machen?
 

Pentalon

Bekanntes Mitglied
Probier mal das:

Java:
public class Gameboard {
   public static void main(String args[]){
	   int size = 0;
	   Scanner s = new Scanner(System.in);
	   do {
		   System.out.println("Gib die Größe des Spielbretts an (größer als 5)!");
		   try {
			   size = s.nextInt();
		   } catch (InputMismatchException e) {
			   System.out.println("Gib mal normale Zahl ein!");
		   }
	   } while (size < 5);
	   System.out.println(size);
   }
}

Pentalon
 

DrZoidberg

Top Contributor
Im catch block muss ein s.next() stehen, da s.nextInt() nichts liest wenn du z.B. Buchstaben anstelle von Zahlen eingibst. s.next() entfernt dann diese Buchstaben aus dem Eingabebuffer.
Du kannst übrigens Umlaute in den Quellcode schreiben. Du musst halt nur aufpassen, dass javac auch die selbe Kodierung verwendet wie dein Editor. z.B. wenn dein Editor im UTF8 Format speichert, rufst du javac so auf "javac -encoding "utf8" Gameboard.java". Desweiteren musst du noch im Code die Kodierung der Windows Konsole angeben (cp850).

Java:
import java.util.InputMismatchException;
import java.util.Scanner;
import java.io.PrintStream;
 
public class Gameboard {
    public static void main(String args[]) {
        try {
            System.setOut(new PrintStream(System.out, true, "cp850"));
        } catch(Exception e) {
            e.printStackTrace();
        }
        int size = 0;
        Scanner s = new Scanner(System.in);
        do {
            System.out.println("Gib die Größe des Spielbretts an (größer als 5)!");
            try {
                size = s.nextInt();
            } catch (InputMismatchException e) {
                size = 0;
                s.next();
                System.out.println("Gib mal normale Zahl ein!");
            }
        } while (size <= 5);
        System.out.println(size);
    }
}
 
M

Mindblaster

Gast
Hey, vielen Dank!!! Jetzt hat es geklappt. Übrigens ich habe den ersten try/catch Block weggelassen und es geht trotzdem :)

Vielen Dank noch Mal und guten Rutsch!!!
 
M

Mindblaster

Gast
Hey Leute, wünsch euch erst Mal ein Frohes Neues.
Hab leider wieder Probleme mit meinem Programm.
Leider habe ich es zuerst voll unstrukturiert geschrieben (alles in der Main Methode).
Nun habe ich versucht alles in separate Methoden aufzuteilen. Dabei kam ich zu einem Problem.
Nun ich habe folgenden Code geschrieben:

[Java]
import java.util.Scanner;
import java.util.InputMismatchException;

public class Game {
static Scanner inputSize = new Scanner(System.in);
static Scanner inputXCord = new Scanner(System.in);
static Scanner inputYCord = new Scanner(System.in);
static int size;
public static void main(String[] args) {
createEmptyBoard();

}

public static int inputNewSize() {
do {
System.out.println("Gib als Ziffer die Größe des Spielbretts an (mindestens 5)!");
try {
size = inputSize.nextInt();
if (size < 5) {
System.out.println("Die Spiel hat " + (size) + " Felder. Das ist zu wenig");
} else {
System.out.println("Die Spiel hat " + (size) + " Felder.");
}
} catch (InputMismatchException e) {
size = 0;
inputSize.next();
}
} while (size < 5);
return size;
}

public static void createEmptyBoard() {
int [][] board = new int[inputNewSize()][inputNewSize()];
for (int i = 0; i < inputNewSize(); i++){
for (int j = 0; j < inputNewSize(); j++) {
board[j] = 0;
}
}
System.out.println(board[1][2]);
}
}
[/Java]

Nun mein Problem ist jetzt, dass es egal ist, wasich für Scanner inputSize eingebe, ich werde nochmal gefragt einen Wert einzugeben. Auch wenn ich einen Wert größer als 5 eingegeben habe.
Habe keine Ahnung wieso das so passiert :(
 
M

Mindblaster

Gast
Hey Leute, wünsch euch erst Mal ein Frohes Neues.
Hab leider wieder Probleme mit meinem Programm.
Leider habe ich es zuerst voll unstrukturiert geschrieben (alles in der Main Methode).
Nun habe ich versucht alles in separate Methoden aufzuteilen. Dabei kam ich zu einem Problem.
Nun ich habe folgenden Code geschrieben:

[Java]
import java.util.Scanner;
import java.util.InputMismatchException;

public class Game {
static Scanner inputSize = new Scanner(System.in);
static Scanner inputXCord = new Scanner(System.in);
static Scanner inputYCord = new Scanner(System.in);
static int size;
public static void main(String[] args) {
createEmptyBoard();

}

public static int inputNewSize() {
do {
System.out.println("Gib als Ziffer die Größe des Spielbretts an (mindestens 5)!");
try {
size = inputSize.nextInt();
if (size < 5) {
System.out.println("Die Spiel hat " + (size) + " Felder. Das ist zu wenig");
} else {
System.out.println("Die Spiel hat " + (size) + " Felder.");
}
} catch (InputMismatchException e) {
size = 0;
inputSize.next();
}
} while (size < 5);
return size;
}

public static void createEmptyBoard() {
int [][] board = new int[inputNewSize()][inputNewSize()];
for (int i = 0; i < inputNewSize(); i++){
for (int j = 0; j < inputNewSize(); j++) {
board[j] = 0;
}
}
System.out.println(board[1][2]);
}
}
[/Java]

Nun mein Problem ist jetzt, dass es egal ist, wasich für Scanner inputSize eingebe, ich werde nochmal gefragt einen Wert einzugeben. Auch wenn ich einen Wert größer als 5 eingegeben habe.
Habe keine Ahnung wieso das so passiert :(

Im Grunde will ich einfach einen Array erstellen, dessen Größe von dem Benutzer bestimmt werden soll.
Dieser Array soll dann in jedem Feld zuerst 0 sein.
 
P

phip1611

Gast
[...]
[Java]
[...]
static Scanner inputSize = new Scanner(System.in);
static Scanner inputXCord = new Scanner(System.in);
static Scanner inputYCord = new Scanner(System.in);
[...]
[/Java]
[...]

Das ist höchst :exclaim: :question: :exclaim: unperformant. o_O
Java:
// wenn dann schon 
static Scanner input = new Scanner(System.in);
// obwohl Scanner für Einsteiger sowieso viel zu Mächtig sein soll.

String wayne = input.next();
int x = input.nextInt();

------------------

[JAVA=26]inputSize.next();[/code]

Du "holst" dir zwar eine Zahl so "herein" die wird aber nirgendswo abgespeichert :bloed: ( Smiley ist nicht böse gemeint. Ich finde den einfach nur total cool :D )
 
Zuletzt bearbeitet von einem Moderator:
M

Mindblaster

Gast
Das ist höchst :exclaim: :question: :exclaim: unperformant. o_O
Java:
// wenn dann schon 
static Scanner input = new Scanner(System.in);
// obwohl Scanner für Einsteiger sowieso viel zu Mächtig sein soll.

String wayne = input.next();
int x = input.nextInt();

------------------

[JAVA=26]inputSize.next();[/code]

Du "holst" dir zwar eine Zahl so "herein" die wird aber nirgendswo abgespeichert :bloed: ( Smiley ist nicht böse gemeint. Ich finde den einfach nur total cool :D )

Ok, wenn ich richtig verstehe, dann brauche ich für alle Eingaben nur einen Scanner?
 
H

hüteüberhüte

Gast
Ok, wenn ich richtig verstehe, dann brauche ich für alle Eingaben nur einen Scanner?

Es geht auch mit einem BufferedReader:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author hütte
 */
public class ZahlSuchen {

    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static int nächsteZahl(int von, int bis) throws IOException {
        while (true) {
            try {
                System.out.printf("Zahl zwischen %d und %d eingeben: ", von, bis);
                int z = Integer.parseInt(reader.readLine());
                if (z < von || z > bis) {
                    System.out.printf("%d zu klein oder zu groß.%n", z);
                } else {
                    return z;
                }
            } catch (NumberFormatException nfe) {
                System.out.println(nfe);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        boolean[] bolArr = new boolean[(int) (Math.random() * 101.0)];
        int versuche = 0;
        int fehler = 0;
        int zahl;
        while ((zahl = nächsteZahl(0, 100)) != bolArr.length & ++versuche == versuche) {
            if (zahl < bolArr.length) {
                System.out.println("Eingabe kleiner als gesuchte Zahl.");
                if (bolArr[zahl]) {
                    System.out.printf("Eingabe bereits eingegeben. %d Fehler.%n", fehler);
                    fehler++;
                } else {
                    bolArr[zahl] = true;
                }
            } else {
                System.out.println("Eingabe größer als gesuchte Zahl.");
            }
        }
        System.out.println("Richtige Eingabe: " + zahl);
        System.out.println("Versuche        : " + versuche);
        System.out.println("Fehler          : " + fehler);
    }
}

Die Länge des Arrays (zwischen 0 und 100) muss erraten werden. Die Versuche werden mitgezählt. Liegt eine Eingabe unter der Arraylänge und wurde sie bereits gemacht, wird ein Fehler berechnet.

Die while-Schleife ist umständlich formuliert.

Aber ich würde die Logik nicht aus der Main auslagern bei diesem kurzen Programm. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
L Eine Zahl in Binärdarstellung ausgeben Java Basics - Anfänger-Themen 13
J Überprüfen ob String eine Zahl ist Java Basics - Anfänger-Themen 2
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
T Ein String eine Zahl zuweisen Java Basics - Anfänger-Themen 15
llabusch Operatoren Methode um eine Zahl zu quadrieren Java Basics - Anfänger-Themen 1
M Prüfen, ob Zeichen eine Zahl ist Java Basics - Anfänger-Themen 3
C Datentypen Prüfen of eine Zahl Quadratzahl ist Java Basics - Anfänger-Themen 2
I Variablen Wie initialisiert man in Java eine Variable ohne das Setzen von 0 oder einer anderen Zahl? Java Basics - Anfänger-Themen 8
N jnumberfield prüfen, ob eine Zahl eigegeben wurde Java Basics - Anfänger-Themen 12
K Konvertierung von einem Text in eine Zahl in Excel(JXL) Java Basics - Anfänger-Themen 2
T Prüfen, ob ein String eine Zahl ist Java Basics - Anfänger-Themen 10
Haubitze_Broese Potenz einer Zahl, der Exponent ist dabei eine beliebige ganze Zahl? Java Basics - Anfänger-Themen 10
Luk10 Zufallszahl "ohne" eine bestimmte Zahl(en) Java Basics - Anfänger-Themen 8
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
S Wie überprüfe ich eine Zahl (in einer Char-Variable) auf einstelligkeit? Java Basics - Anfänger-Themen 8
S Welche möglichkeiten gibt es eine Zahl zu spiegeln? Java Basics - Anfänger-Themen 17
C Binärzahl vom Typ String in eine Zahl vom Typ Integer umwandeln Java Basics - Anfänger-Themen 4
T Testen ob eine Zahl im array doppel vorkommt. Java Basics - Anfänger-Themen 7
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
G überprüfen ob string eine zahl enthält Java Basics - Anfänger-Themen 6
G Wie eine Int Zahl in die einzelnen Ziffern zerlegen? Java Basics - Anfänger-Themen 6
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
C wie pruefe ich ob ein Vektorelement eine Zahl ist Java Basics - Anfänger-Themen 3
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben