Nach catch mit der schleife weitermachen

Status
Nicht offen für weitere Antworten.

Meran

Mitglied
Hallo, ich lerne erst seit einigen Tagen Java, daher bitte nicht wundern, dass ich bestimmt nicht alles optimal gelöst habe.
Mein Problem ist folgendes: Der User soll immer wieder zu einem Auswahlmenü kommen, was auch so lange klappt, bis er durch falsche eingaben (Buchstaben bei einem int in meinem Fall) eine Exception auslöst, was dann zum Beenden des Programms führt, obwohl ich die Exception catche und eigentlich möchte, dass er dann mit der Schleife weiter macht, so dass der User zurück ins Menü kommt.

Java:
 try{
		while(true){
		System.out.println("Was möchten sie machen?");
		System.out.println("1: Kontobesitzer anzeigen lassen.\n2: Kontostand anzeigen lassen.\n3: Geld auf das Konto bringen.
\n4: Geld vom Konto abholen.\n5: Das Programm Beenden.");
		int ein = sc.nextInt();
		switch (ein) {
			case 1:
				System.out.println(Name);
				Thread.sleep(1000);
				break;
			case 2:
				System.out.println(kto.getKontostand() + " €");
				Thread.sleep(1000);
				break;
			case 3:
				System.out.println("Wie viel Geld möchten sie auf ihr Konto bringen?
(Ohne Euro-, aber ggf. mit Kommazeichen, nicht mit Punkt.)");
				kto.setKontostand(sc2.nextDouble());
				System.out.println("Transaktion erfolgreich.");
				Thread.sleep(1000);
				break;
			case 4:
				System.out.println("Wie viel Geld möchten sie von ihrem Konto abholen?
(Ohne Euro-, aber ggf. mit Kommazeichen, nicht mit Punkt.)");
				kto.setKontostand2(sc2.nextDouble());
				System.out.println("Transaktion erfolgreich.");
				Thread.sleep(1000);
				break;
			case 5:
				pw.println(Name);
				pw.println(kto.getKontostand());
				pw.close();
				System.exit(0);
			
		
		
		}}}
		catch (Exception e) {System.out.println("Nur Zahlen bitte.");};

Was muss ich ändern, damit ich auch nach der Exception weiter in der Schleife, also im Menü, bleibe?


Eine Frage die damit in Verbindung steht: Kann ich irgendwie einen Punkt in meinem Quellcode festlegen und mit einem Befehl dann zurück zu diesem Punkt springen? So könnte man dieses (und noch einige andere Probleme von mir) lösen.
 
S

SlaterB

Gast
das try/ catch muss in die while-Schleife

sowas immer mit 10 Zeilen Test-Code testen

while (true) {
try {
test;
}catch(Exception e) {

}
}
nicht mitten in 40 Zeilen echter Anwendung
 

Meran

Mitglied
Ich habe das try jetzt in die while Schleife gesetzt und die Klammern dementsprechend verändert. Jetzt komme ich zwar ins Menü zurück, aber sobald ich da eine Option auswähle, die mit einem Inputstream zu tun hat, tut er direkt so, als hätte ich wieder etwas eingegeben, was eine Exception auslöst, zeigt den Exception Text an und ich komme zurück ins Menü.
Bei einer gerade gemachten kleinen Testdatei passiert genau das gleiche.
Wie kann ich das verhindern, so dass das Programm normal weiter funktioniert?
 
S

SlaterB

Gast
diese Erklärung kann ich nicht nachvollziehen

> tut er direkt so, als hätte ich wieder etwas eingegeben
was bedeutet das, werden wirklich echte Zeichen gelesen? welche? mehrmals die gleichen?,
oder wird eine Eingabe übersprungen oder was genau,

Code wäre dazu sicherlich auch günstig,
möglichst kurz, es müssen doch sicher nicht alle case-Fälle sein

edit: kann sein, dass du eine Exception bei Scanner.nextInt() oder so meinst und dann danach immer noch die gleichen Daten im Scanner stehen,
dann musst du diese per Scanner.nextLine() oder so leeren
 
Zuletzt bearbeitet von einem Moderator:

Meran

Mitglied
Java:
package test;
import java.util.Scanner;
public class Except {
	public static void main(String[] args) {

		Scanner sc = new Scanner (System.in);
	
	
		
		while (true) {
			try {
			System.out.println("Test");	
			int Zahl = sc.nextInt();
			
			
			
			}catch(Exception e) {
				System.err.println("Fehler");
			}
			
	}

}}
Das ist meine Testanwendung. Solange ich Zahlen eingebe gibt es keine Probleme, sobald ich einen Buchstaben eingebe, kommen unendlich lange "Test" und "Fehler" ausgaben, ohne dass ich irgendetwas eingeben könnte, oder, dass irgendeine Eingabe angezeigt wird.


Edit: Wo genau muss ich dann das Scanner.nextLine(); eingeben (Zum Beispiel in diesem Testprogramm)?
 
S

SlaterB

Gast
}catch(Exception e) {
System.err.println("Fehler");
sc.nextLine(); // Eingabe ziemlich sicher ohne Exception lesen + nicht verarbeiten = Eingabe löschen

}
 

Painii

Bekanntes Mitglied
Java:
catch(Exception e){
System.out.println("Fehler");
}
1.Sowas ist selten gut, fang lieber nur die spezielle Exception die auftreten kann (sicher irgendwas mit NumberFormat oder so wenn du statt ner Zahl einen Buchstaben eingibst)
2. Juhu, ein Fehler. Und was für einer? Wenn du eine Fehlerausgabe machst schreib am besten die Exception immer mit rein (z.b. e.printStackTrace(); )

3. Ich würde raten dass es an dem Scanner liegt, ich meine irgendwo hier nen Thread letztens gesehen zu haben wo es ein ähnliches Problem war... Einfachste Möglichkeit:
Java:
while(true){
scanner = new Scanner(System.in);
//try-catch
Damit ist auf jeden Fall sichergestellt das dein Scanner leer ist und keine Zeichen mehr auf Bearbeitung warten.

edit: oder so wie von SlaterB empfohlen, seine Variante ist wohl besser (weil du nicht immer nen neuen Scanner baust)
 
Zuletzt bearbeitet:

Meran

Mitglied
@SlaterB Danke für deine schnelle Hilfe, jetzt läuft es so, wie ich es wollte.

@Painii Im Moment fange ich noch alle Exceptions, weil das Programm noch im Aufbau ist. Es soll zB noch in eine Datei schreiben und aus ihr lesen, daher habe ich das im Moment erst mal allgemein gehalten, bis ich mit dem Programm fertig bin und dann wollte ich die Exceptions genau angeben.
Und in meinem richtigen Datei wird zwar nicht die genaue Exception angegeben, dafür sage ich dem User aber, dass er nur Zahlen eingeben darf (was er gerade augenscheinlich nicht gemacht hat, sonst wäre der Fehler ja nicht gekommen) was dem Standarduser wahrscheinlich mehr sagt, als eine Java Exception.
Trotzdem danke für deine konstruktive Kritik.
 

Painii

Bekanntes Mitglied
Im Moment fange ich noch alle Exceptions, weil das Programm noch im Aufbau ist. Es soll zB noch in eine Datei schreiben und aus ihr lesen, daher habe ich das im Moment erst mal allgemein gehalten, bis ich mit dem Programm fertig bin und dann wollte ich die Exceptions genau angeben.
Mach es doch lieber gleich unterteilt.
Wenn du sowieso vorhast es später einzeln zu machen, mach es doch gleich.
Sonst musst du später durch alle Files gehen und alle catch-Blöcke umformulieren, was je nach Programmlänge sehr lange dauern kann (du musst dich ja dann in jeden catch-block einlesen, schauen welche Exceptions kommen können und wie du die da genau handhabst)

Und in meinem richtigen Datei wird zwar nicht die genaue Exception angegeben, dafür sage ich dem User aber, dass er nur Zahlen eingeben darf (was er gerade augenscheinlich nicht gemacht hat, sonst wäre der Fehler ja nicht gekommen) was dem Standarduser wahrscheinlich mehr sagt, als eine Java Exception.
Ja natürlich, aber das mit dem "Fehler" hast du ja für dich geschrieben - und dir als Programmierer wird ein "Fehler" nicht so viel helfen wie eine präzise Angabe in welcher Zeile was falsch gelaufen ist.

In dem Beispiel hast du nur eine Fehlerquelle, aber später wird das eben nichtmehr so leicht auszumachen sein was denn nun genau falsch läuft, da hilft dann eine präzise Zeilenangabe schon.
 

Meran

Mitglied
Ja stimmt, sobald das Programm lang ist und es viele Fehlerquellen sind wäre es für den Programmierer nützlich. Ich hatte jetzt mehr an den User gedacht, der keine Ahnung von Java hat und einfach ein funktionierendes Programm möchte, denn der wird von einer Exception ja eher verwirrt, aber ich kann die Exceptions ja jetzt noch einbinden und erst wenn ich komplett fertig bin, die genaue Exceptionausgabe rausnehmen.
Dann änder ich das jetzt mal, damit es direkt richtig ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben