Java Zahl in einzelne char oder strings zerlegen?
Hallo :)
Ich bin noch recht neu in Java und habe folgendes Problem. Ich soll herausfinden wie viele Stellen eine Zahl hat, also bei 500 müsste n = 3 rauskommen. Jedoch weiß ich nicht wie ich die Zahl "zerschneiden" kann sodass ich 3 Ziffern habe. Ich hätte gedacht das ich die Zahl zerschneide und dann die einzelnen Werte in ein Array speichere welches ich dann mit einer Schleife ablaufe und so oft wie die Schleife durchlaufen wurde, so viele Stellen hat die Zahl. Das wäre mein Kampfplan in dem Fall aber ich scheitere schon an dem zersückeln der Zahl. ich dachte man kann die Zahl irgendwie in einzelne char´s unterteilen sodass man dann hat: '5','0','0'. Wie ist jedoch die Frage.. Ist es überhaupt richtig den int-Wert in mehrere char´s zu zerteilen oder müsste man erst den int-Wert in einen String umwanderln um dann mit .toCharArray ein Feld draus zu machen?
Ich hoffe ich hab mein Problem verständlich geschildert und jemand hat ne Idee wie ich das anstellen kann :)
MfG
5 Antworten
Also wenn ich hier die vielen umständlichen Umwege sehe, muss ich mich doch mal einschalten. Es ist nur ein rein mathematischer 1-Zeiler nötig:
floor(log(n)/log(10))+1
denn der dekadische Log. liefert doch bereits die Stellenanzahl...
Alle anderen Umwege über Strings oder zig Teil-Modulos benötigen bei sehr großen Zahlen extrem viel Zeit und Speicher!
Für noch größere Zahlen hat JAVA den Typ BigInt mit Extra-Funktionen.
wenn Du nur die Anzahl der Stellen ermitteln willst, kannst Du das auch so machen:
wandel die Zahl in einen String um und ermittel die Länge des Strings !!!
z.B.
String s = String.valueOf(i);
int digits = s.length();
etliche Wege führen nach Rom !!! :D
etliche Wege führen nach Rom !!! :D
Alle Wege führen nach Rom! ;)
Nur (leider) führen manche über Karthago... ;)
Ich würde dir die Division durch 10 empfehlen. Damit kannst du immer eine Stelle kürzen.
Bei zahl als Integer:
500 -> 50 -> 5->0
while(zahl/10>0) {
zahl=zahl/10;
n=n+1;
}
Ansonsten:
500 -> 50 -> 5->(0.5<1)
while(zahl/10>1) {
zahl=zahl/10;
n=n+1;
}
Korrektur: while(zahl>0) bzw while(zahl>1) sonst wird ein Sprung ausgelassen.
Bzw. ganz einfach machst du es dir, mit dem Teilen durch 10 statt des Modulo.
Anbei ein Beispiel wie ich das ganze gelöst habe. Ich stelle kein Anspruch auf schönen Code in dem Beispiel ;)

Gute Idee,
Eine kurze Lösung wäre:
public int length(int i){
for(int ret=1; true; ret++){
if(i<10) return ret;
else i/=10;
}
}
Du kannst Dir Arrays und ähnliches sparen. Wie so oft denkt man einfach zu kompliziert.
Arbeite hierbei am besten mit dem modulo 10.
So lange noch etwas da ist wird es durchgeführt so lange die Zahl größer als 9 ist.
Sag bescheid wenn ich tiefer ins Detail gehen soll oder Du noch andere Fragen hast.
MFG Souta