NumberFormatException-Problem

CoderNoob

Mitglied
Hi,
ich habe ein kleines Verständnisproblem in Bezug auf eine NumberFormatException und komme einfach nicht dahinter, warum diese ausgelöst wird - obwohl es vermutlich etwas ganz triviales/offensichtliches ist...😳

Zum Problem:
Da ich einfach mal mein Wissen darüber, wie man Zahlen in verschiedene Zahlensysteme umrechnet, auffrischen wollte, dachte ich mir, ich bastel einen eigenen Algorithmus der z. B. Dezimalzahlen in Dualzahlen und Hexadesimalzahlen verwandeln kann. Das stellte sich auch als recht einfach heraus und hat eigentlich auf Anhieb geklappt - dachte ich zumindest. Jetzt habe ich aber festgestellt, dass mein Algorithmus nur mit Dezimalzahlen bis 1023 korrekt funktioniert, bei größeren Zahlen bricht das Programm mit einer NumberFormatException ab.
Hier der Code meiner Methode:
Java:
private static int dezInBin(int dez)
	{//dezInBin()
		int bin, laenge;
		String binBuffer="0", buffer2="0";
		
		//Divisions-Methode durchführen
		for(int i=(int)dez; i>0; i=i/2)
		{
			
			binBuffer+=(int)dez%2;
			dez=dez/2;
		}
		binBuffer=binBuffer.substring(1);
		
		//Ergebnis der Divisions-Methode umdrehen
		laenge=binBuffer.length();
		for(int i=laenge-1; i>=0; i--)
		{
			buffer2+=String.valueOf(binBuffer.charAt(i));
		}
		buffer2=buffer2.substring(1);
		bin=Integer.parseInt(buffer2);
		return bin;
Das Problem scheint in Zeile 22 zu liegen, doch ich verstehe nicht warum die Exception ausgelöst wird - immerhin enthält der String nur Zahlen und bis 1023 klappt es ja problemlos. Kann mir das jemand erklären?
 
Lass dir doch den String, den du parsen willst, ausgeben. Vielleicht sieht man dann schon, wo das Problem ist.
 
Diese 1-0-Kette wird ja bei Deinem Integer.parseInt(...) als Integer interpretiert. Wenn da mehr Bit-Stellen enthalten sind als die Zahl 2147483647 (max. Integer) Dezimalstellen hat, dann kann die Kette nicht als Zahl interpretiert werden. Wie schon geschrieben: Wozu die Bitfolge 1:1 als Zahl interpretieren? Gibt doch einfach den String zurück.

Java:
private static String dezInBin(int dez) {
  ...
  buffer2=buffer2.substring(1);
  return buffer2;
}
 
Zuletzt bearbeitet:
Vielen Dank für Eure schnellen Antworten! Ich habe Euren Rat befolgt und darauf verzichtet das Ergebnis in einen Integer zu verwandeln, sondern gebe es jetzt einfach als String aus und siehe da: Es funktioniert korrekt...🙂

Wenn ich das also richtig verstehe, wurde die Exception produziert, weil z. B. die Darstellung der 10000000000 (1024 als Dualzahl) als String im Speicher aus mehr Bits besteht, als für den Datentyp Integer bereitgestellt werden und somit sozusagen zu groß zum "parsen" war? Ist das so richtig?
 
die Darstellung von 10000000000 als String oder auf andere Weise ist kein Problem,
nur gibt es keinen int 10000000000, deshalb kann String 10000000000 nicht korrekt verarbeitet werden
 
SlaterB hat gesagt.:
die Darstellung von 10000000000 als String oder auf andere Weise ist kein Problem,
nur gibt es keinen int 10000000000, deshalb kann String 10000000000 nicht korrekt verarbeitet werden

Ah, Danke! Jetzt (nachdem ich auch mal die Dezimalstellen gezählt habe) ist der Groschen endgültig gefallen...🙂
 

Zurück
Oben