2 numberformatexception abfangen?

Status
Nicht offen für weitere Antworten.

friedolin

Mitglied
Hallo,

folgendes habe ich vergebens versucht:

Code:
try{
			
			short konGroesse = Short.parseShort(strGroesse);
			short konGewicht = Short.parseShort(strGewicht);
			

		}
		catch(NumberFormatException nfe){
				System.out.println("groesse kann nicht konvertiert werden");			
		}
		catch(NumberFormatException nfe){
				System.out.println("gewicht kann nicht konvertiert werden");			
		}

Folgende Fehlermeldung erhalte ich:

Code:
D:\Programme\WTK22\apps\myBMI\src\MyBMI.java:115: exception java.lang.NumberFormatException has already been caught
		catch(NumberFormatException nfe){
                ^

Wie kann ich sonst prüfen, welches parsen nicht geklappt hat?
Hat da jmd n Tipp?
 

Wildcard

Top Contributor
Code:
   try
    { 
          
         short konGroesse = Short.parseShort(strGroesse); 

    } 
    catch(NumberFormatException nfe){ 
            System.out.println("groesse kann nicht konvertiert werden");     
    }     
    try
    {
         short konGewicht = Short.parseShort(strGewicht); 
    }
    catch(NumberFormatException nfe){ 
            System.out.println("gewicht kann nicht konvertiert werden");          
    }

[edit]2l8 :? [/edit]
 

bambi

Bekanntes Mitglied
jepp. anders geht's nicht. bei einer nfe exception geht er ja immer in das erste catch, dass zu diesem typ (nfe) gefunden wird.
 

friedolin

Mitglied
danke euch dreien!

Den restlichen Code schreib ich dann im 2. catch block, damit der code nur weiter ausgeführt wird, wenn beide parseShort korrekt liefen?

Unterhalb des 2. catchBlockes darf ja nichts stehen, da der ja dann so oder so weiterausgeführt wird, oder?
 

friedolin

Mitglied
Also so hab ichs jetzt:

Code:
		    try{
		         
		         short konGroesse = Short.parseShort(strGroesse);
			}
		    catch(NumberFormatException nfe){
		            System.out.println("groesse kann nicht konvertiert werden");
		            Alert alert = new Alert("Ergebnis","groesse kann nicht konvertiert werden",null,AlertType.INFO);
					alert.setTimeout(Alert.FOREVER);
					d.setCurrent(alert);     
		    }
		         
		    try{
		         short konGewicht = Short.parseShort(strGewicht);
		         System.out.println("weiter gehts nur hier..."); 
		    }
		    catch(NumberFormatException nfe){
		            System.out.println("gewicht kann nicht konvertiert werden");         
		            Alert alert = new Alert("Ergebnis","gewicht kann nicht konvertiert werden",null,AlertType.INFO);
					alert.setTimeout(Alert.FOREVER);
					d.setCurrent(alert);
					
		    }
			System.out.println("weiter gehts...");

Dazu folgende ausgabe in der konsole:

Wenn beide werte nicht korrekt:

groesse kann nicht konvertiert werden
gewicht kann nicht konvertiert werden
weiter gehts...

Wenn Gewicht korrekt aber Groesse nicht:

groesse kann nicht konvertiert werden
weiter gehts nur hier...
weiter gehts...

Wenn Groesse korrekt aber Gewicht nicht:

gewicht kann nicht konvertiert werden
weiter gehts...

Wenn beide korrekt:

weiter gehts nur hier...
weiter gehts...

Eigentliche sollte "Weiter gehts nur hier" ja nur stehen, wenn beide Werte korrekt sind; Wenn aber das Gewicht korrekt ist, aber nicht die Groesse gehts aber ja leider auch!?

Oder wo bzw. wie muss ich weitere Anweisungen plazieren, die nur ausgeführt werden, wenn beide parseShort funktionieren? Kann mir da nochmal jmd helfen?

@Wildcard wie ist das gemeint:
oder du arbeitest mit Methoden und Rückgabewerten.
 
B

bygones

Gast
es wird eine exception geworfen wenn die größe nicht richtig ist und dann macht er einfach weiter. wenn das gewicht in ordnung ist, dann gibt er auch "Weiter gehts nur hier" aus....

entweder du beendest die methode in einem catch Block oder du initialisierst die beiden werte sagen wir mit dem einem Wert, den sie nicht annehmen können. Nach allen catch blöcken schaust du, ob die werte nun anders sind als die initialwerte, wenn ja wurde was gemacht, wenn nicht gabs probleme
 

friedolin

Mitglied
Hmm, das habe ich verstanden...

Ich versuchs mal anders: Wie kann ich denn prüfen, ob eine zahl zwischen einem bestimmten wert liegt, also
beispielsweise zwischen 10 und 100?

Da in meinem Textfield eh nur numeric eingegeben werden kann, brauch ich mir ja über die parse Geschichte nicht so die Gedanken machen, oder?

BTW: Was passiert denn, wenn ich eine Zahl groesser 2^15 durch parseshort laufen lassen, schneidet die methode den Rest dann ab? Beispielsweise 2^20 = 1048576 macht er dann daraus 2^15 oder kommt es dann zur numberformatexception?
 

bambi

Bekanntes Mitglied
so weit ich weiss bekommst du dann eine NumberFormatException, wenn der Wert zu gross ist.

Ausserdem wuerde ich immer parsen. Das ist einfach besserer Stil und ist definitiv sicherer - gar nicht erst anfangen mit so "Hmm, muss ja nicht unbedingt sein - passiert schon nix..."

Was meinst Du denn mit

Da in meinem Textfield eh nur numeric eingegeben werden kann, brauch ich mir ja über die parse Geschichte nicht so die Gedanken machen, oder?

?
 

Wildcard

Top Contributor
friedolin hat gesagt.:
Ich versuchs mal anders: Wie kann ich denn prüfen, ob eine zahl zwischen einem bestimmten wert liegt, also
beispielsweise zwischen 10 und 100
Code:
if (zahl>10 && zahl<100)
{
    //do something
}
kann man draufkommen, oder :D


Code:
  public static short parseShort(String s, int radix)
	throws NumberFormatException {
	int i = Integer.parseInt(s, radix);
	if (i < MIN_VALUE || i > MAX_VALUE)
	    throw new NumberFormatException(
                "Value out of range. Value:\"" + s + "\" Radix:" + radix);
	return (short)i;
    }

[edit]schon wieder zu spät ???:L [/edit]
 

friedolin

Mitglied
@bambi
Ausserdem wuerde ich immer parsen. Das ist einfach besserer Stil und ist definitiv sicherer - gar nicht erst anfangen mit so "Hmm, muss ja nicht unbedingt sein - passiert schon nix..."
Ok, werd mich dran halten.


Was mein ich damit ?!
Da in meinem Textfield eh nur numeric eingegeben werden kann, brauch ich mir ja über die parse Geschichte nicht so die Gedanken machen, oder?
Ich entwickle unter der j2me und da kann man textfeldern vorgeben, was für einen Inhalt sie nur aufnehmen dürfen; beispielsweise numeric. Nagut ich muss ich ja aber trotzdem aus dem String textfield in short oder was auch immer parsen, vondaher muss ich ja auch die exception abhandeln....


@wildcard




kann man draufkommen, oder :)

Ja, sorry ;)

Das habe ich jedoch leider nicht verstanden:

Code:
   public static short parseShort(String s, int radix)
   throws NumberFormatException {
   int i = Integer.parseInt(s, radix);
   if (i < MIN_VALUE || i > MAX_VALUE)
       throw new NumberFormatException(
                "Value out of range. Value:\"" + s + "\" Radix:" + radix);
   return (short)i;
    }

wie implementier ich das denn? Ich weiß ja das gewicht sowie groesse stellenmässig nie grösser als 3 Stellen haben kann, also nie grösser als 999Kg oder 999 cm, die -99Kg und 99cm kann ich ja mit if (zahl>10 && zahl<100)
behandeln, also könnte ich ja vorm parsen den string auf drei Stellen kürzen, oder würdet ihr das anders machen?
 

Wildcard

Top Contributor
friedolin hat gesagt.:
wie implementier ich das denn?
Das brauchst du nicht zu implementieren :D
Das ist die SHort.parseShort() Methode.
Hab sie nur hier reingemacht das du selbst siehst was bei zu großen Werten passiert:
Code:
   if (i < MIN_VALUE || i > MAX_VALUE) 
       throw new NumberFormatException( 
                "Value out of range. Value:\"" + s + "\" Radix:" + radix);

friedolin hat gesagt.:
Ich weiß ja das gewicht sowie groesse stellenmässig nie grösser als 3 Stellen haben kann, also nie grösser als 999Kg oder 999 cm, die -99Kg und 99cm kann ich ja mit if (zahl>10 && zahl<100)
behandeln, also könnte ich ja vorm parsen den string auf drei Stellen kürzen, oder würdet ihr das anders machen?
ich würd den String nicht vor dem parsen kürzen.
Wenn ein Anwender 15030kg eingibt würde er damit rechnen eine Fehlermeldung zu bekommen.
Vorher kürzen würde aber bedeuten das dein Prog mit 30kg weiterrechnet.
Einfach parsen und wenn das passt prüfen ob die Zahl zwischen foo und bar liegt.
Ansonsten Fehlermeldung ausgeben.
 

friedolin

Mitglied
Aah, ok alles verstanden - DANKE! :toll: :D

Werde es dann jetzt so machen:
Code:
short konGroesse = null;
short konGewicht = null;

		    try{
		         
		         konGroesse = Short.parseShort(strGroesse);
			}
		    catch(NumberFormatException nfe){
		            System.out.println("groesse kann nicht konvertiert werden");
		            Alert alert = new Alert("Ergebnis","groesse kann nicht konvertiert werden",null,AlertType.INFO);
					alert.setTimeout(Alert.FOREVER);
					d.setCurrent(alert);     
		    }
		         
		    try{
		         konGewicht = Short.parseShort(strGewicht);

		    }
		    catch(NumberFormatException nfe){
		            System.out.println("gewicht kann nicht konvertiert werden");         
		            Alert alert = new Alert("Ergebnis","gewicht kann nicht konvertiert werden",null,AlertType.INFO);
					alert.setTimeout(Alert.FOREVER);
					d.setCurrent(alert);
					
		    }

if(konGewicht != null && konGroesse != null ){
dann gehts hier weiter mit der Prüfung, ob negative Werte eingegeben wurden...
}

Korrekt?
 
B

bygones

Gast
naja wenn man es als pseudo code betrachtet ja, aber nicht als richtigen code.

short sind primitive Datentypen, keine Objekte, können also nicht null sein !
 

friedolin

Mitglied
short sind primitive Datentypen, keine Objekte, können also nicht null sein !
Das hab ich denn gestern auch noch gemerkt :wink:

So habs ichs jetzt gemacht, habe aber ein Problem, wenn 2 falsche Werte eingegeben kommt die Meldung "die Werte dürfen nicht 0 sein". Wie kann ich das nur schaffen, weiß da echt nicht weiter...?! Denk ich da zu kompliziert??

Code:
		short konGroesse = 0;
		short konGewicht = 0;
		String	strGroesse = groesse.getString();
		String	strGewicht = gewicht.getString();
		String	strAuswahl = auswahl.getString(auswahl.getSelectedIndex());

		try{
		         
			konGroesse = Short.parseShort(strGroesse);
		}
		catch(NumberFormatException nfe){
			alertFenster("Falsche Groessenangabe","Die Groesse muss eine ganze Zahl zwischen 1 und 300 sein");
		}
		         
		try{
			konGewicht = Short.parseShort(strGewicht);
		}
		catch(NumberFormatException nfe){
				alertFenster("Falsche Gewichtsangabe","Das Gewicht muss eine ganze Zahl zwischen 1 und 500 sein");
		}
		
		if(konGewicht != 0 && konGroesse != 0){
			if(konGroesse < 1 || konGroesse > 300){
				alertFenster("Falsche Groessenangabe","Die Groesse muss eine ganze Zahl zwischen 1 und 300 sein");
			}
			else if(konGewicht < 1 || konGewicht > 500){
				alertFenster("Falsche Gewichtsangabe","Das Gewicht muss eine ganze Zahl zwischen 1 und 500 sein");
			}
			else{
				System.out.println("Jetzt gehts los...");
			}
		}
		else if(konGewicht == 0 || konGroesse == 0){
			alertFenster("Achtung","Die Werte duerfen nicht 0 sein!");		
		}
 

mic_checker

Top Contributor
&& anstatt || da er sonst überprüft ob konGewicht 0 ist und falls ja spring er in Block rein. Du willst aber beide Bedingungen überprüfen - schätze ich mal.

Code:
      else if(konGewicht == 0 && konGroesse == 0){
         alertFenster("Achtung","Die Werte duerfen nicht 0 sein!");      
      }
Dann geht er nur rein wenn beide == 0 sind, also beide "falsch" eingegeben wurden.

oder was für ein prob hast du?
 

friedolin

Mitglied
Grundsätzlich möchte ich nur, dass die beiden textfelder zur short geparst werden und die werte zwischen 1 und 300 liegen....
Wenn das nicht passt, soll das alertFenster aufgerufen werden und wenn alles ok, soll solls mit dem code weitergehen...


&& anstatt || da er sonst überprüft ob konGewicht 0 ist und falls ja spring er in Block rein.

Beide Werte dürfen ja nicht 0 sein, daher das oder....
 

mic_checker

Top Contributor
Aber es ist doch egal ob beide oder nur ein Wert 0 ist, es soll doch so oder so ein Alert-Fenster ausgegeben werden.
Wenn einer von beiden (wie mit deinem bisherigen Oder) dann Alert, ansonsten Code ausgeführt.

Wenn du nicht willst das im Fall von zwei falschen Eingaben alert kommt kannst du obige Aussage ja holen und überprüfen. Oder sonst wie umgehen....
 

friedolin

Mitglied
Habs jetzt mit ner Hilfsvariable parseOK gelöst, schaut das ok aus für Euch?
Funktionieren tuts...

Code:
		short konGroesse = 0;
		short konGewicht = 0;
		
		boolean parsenOK = true;
		
		String	strGroesse = groesse.getString();
		String	strGewicht = gewicht.getString();
		String	strAuswahl = auswahl.getString(auswahl.getSelectedIndex());

		try{
		         
			konGroesse = Short.parseShort(strGroesse);
		}
		catch(NumberFormatException nfe){
			alertFenster("Falsche Groessenangabe","Die Groesse muss eine ganze Zahl zwischen 1 und 300 sein");
			parsenOK = false;
		}
		         
		try{
			konGewicht = Short.parseShort(strGewicht);
		}
		catch(NumberFormatException nfe){
			alertFenster("Falsche Gewichtsangabe","Das Gewicht muss eine ganze Zahl zwischen 1 und 500 sein");
			parsenOK = false;
		}
		
		if(parsenOK == true){
			if(konGroesse < 1 || konGroesse > 300){
				alertFenster("Falsche Groessenangabe","Die Groesse muss eine ganze Zahl zwischen 1 und 300 sein");
			}
			else if(konGewicht < 1 || konGewicht > 500){
				alertFenster("Falsche Gewichtsangabe","Das Gewicht muss eine ganze Zahl zwischen 1 und 500 sein");
			}
			else{
				System.out.println("Alles ok, jetzt gehts los...");
			}
		}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Abfangen von java.lang.NumberFormatException Java Basics - Anfänger-Themen 6
P parseInt -> "202103122000" -> NumberFormatException Java Basics - Anfänger-Themen 14
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
K Datentypen NumberFormatException Java Basics - Anfänger-Themen 7
Dogge NumberFormatException null Java Basics - Anfänger-Themen 5
O NumberFormatException Java Basics - Anfänger-Themen 2
D NumberFormatException Java Basics - Anfänger-Themen 13
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
D Interpreter-Fehler NumberFormatException Textfeld Java Basics - Anfänger-Themen 24
Furtano Variablen NumberFormatException Java Basics - Anfänger-Themen 14
N NumberFormatException, aber wieso? Java Basics - Anfänger-Themen 5
J Problem mit NumberFormatException Java Basics - Anfänger-Themen 6
M NumberFormatException Chat WordPress Java Basics - Anfänger-Themen 13
C NumberFormatException-Problem Java Basics - Anfänger-Themen 6
StupidAttack NumberFormatException Java Basics - Anfänger-Themen 19
M java.lang.NumberFormatException-Problem Java Basics - Anfänger-Themen 6
M BMI-Rechner NumberFormatException Java Basics - Anfänger-Themen 30
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B NumberFormatException: For input string: "" Java Basics - Anfänger-Themen 4
S NumberFormatException Java Basics - Anfänger-Themen 13
K Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 1
R Warum NumberFormatException? Java Basics - Anfänger-Themen 4
J Double.parseDouble(s) wirft keine NumberFormatException Java Basics - Anfänger-Themen 12
G NumberFormatException bei double und long Java Basics - Anfänger-Themen 11
M for-Schleife mit NumberFormatException Java Basics - Anfänger-Themen 15
A NumberFormatException Java Basics - Anfänger-Themen 7
B komische NumberFormatException beim DezimalToBinär-Rechner Java Basics - Anfänger-Themen 4
B NumberFormatException Java Basics - Anfänger-Themen 5
S java.lang.NumberFormatException Java Basics - Anfänger-Themen 2
Dimax SizeLimitExceededException abfangen Java Basics - Anfänger-Themen 6
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
L Erste Schritte IndexOutOfBounce abfangen? Java Basics - Anfänger-Themen 17
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
B Erste Schritte Abfangen eines Fehlers/Ausbrechen aus der Schleife Java Basics - Anfänger-Themen 12
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
D Input/Output Runtime().exec fehler abfangen Java Basics - Anfänger-Themen 4
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
S java tastendrücke direkt abfangen und printen Java Basics - Anfänger-Themen 3
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
OnDemand Exception Abfangen Java Basics - Anfänger-Themen 5
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
H Wie kann ich STRG+V abfangen und ändern Java Basics - Anfänger-Themen 2
B Exception abfangen Java Basics - Anfänger-Themen 33
D [jni] loadLibrary Exception abfangen Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
W Tastatureingabe abfangen Java Basics - Anfänger-Themen 15
S Exception abfangen Java Basics - Anfänger-Themen 2
N Fehlerquelle leere ArrayList elegant abfangen Java Basics - Anfänger-Themen 3
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
M Datentypen Fehler abfangen Java Basics - Anfänger-Themen 5
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
sylo Warnings abfangen Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
H MouseEvent abfangen Java Basics - Anfänger-Themen 9
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Spin Exception abfangen Java Basics - Anfänger-Themen 3
M Frage zum Abfangen ungültiger Werte Java Basics - Anfänger-Themen 9
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
A FileNotFoundException abfangen? Java Basics - Anfänger-Themen 3
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
Spin Abfangen von Fehlern Java Basics - Anfänger-Themen 9
M Exception abfangen? Java Basics - Anfänger-Themen 3
G Eine exception mit negativen zahlen abfangen ? Java Basics - Anfänger-Themen 11
I Dialog - "Ja" / "Nein" abfangen Java Basics - Anfänger-Themen 3
G SQLServerException abfangen Java Basics - Anfänger-Themen 2
C alle möglichen Datumseingaben im Textfeld abfangen Java Basics - Anfänger-Themen 12
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
T String: NeueZeile (" ") , Break etc. abfangen Java Basics - Anfänger-Themen 2
B Programm würft Exception, kann sie aber nicht abfangen! Java Basics - Anfänger-Themen 25
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
M jToggleButton Klick abfangen ohne den Button zu deaktivieren Java Basics - Anfänger-Themen 2
B Tastatur abfangen Java Basics - Anfänger-Themen 11
U Pfeiltasten abfangen Java Basics - Anfänger-Themen 2
B Ausnahmen abfangen Java Basics - Anfänger-Themen 3
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
T jcombobox, item-selektierung abfangen Java Basics - Anfänger-Themen 5
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
S von CommandLine übergebene Parameter abfangen? Java Basics - Anfänger-Themen 12
V Mausklick mit rechter Taste abfangen? Java Basics - Anfänger-Themen 8
C falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
L GUI - Tastaturereignisse abfangen ohne Fokus? Java Basics - Anfänger-Themen 8
D Frage zum abfangen von Exceptions Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben