Java Dezimalstellen einer Natürlichen Zahl ermitteln

M

Mc.Alcatraz

Gast
Hallo Leute, ich brauche Hilfe, habe folgendes Problem:

Ich möchte die Dezimalzahlen eienr Natürlichen Zahl ausgeben/ermitteln, die natürliche Zahl ist vom Typ int. Ein Beispiel:

Bei 145 soll er ausgeben 1 4 5, gerne auch in einem array.
 
ich hatte zwar nicht so vertiefend java, jedoch kann ich dir helfen wie ich es machen würde.

ich würde der "zahl" dem typ string zuweisen und dann per zählschleife (for to do am besten) den string in einzelne character zerlegen(dass du dazu array brauchs is klar). dann wandelst den char in integer um.
habe nur keine ahnung ob ein zeichen "1" auch wirklich die zahl 1 im integer is, aber ich glaube das war bei java so. wenn nicht irre ich mich hiermit und gestehe fehler ein ^^

€: jep claW. ^^
 
Das ist nun nicht effizient oder elegant, aber man kann das auch rekursiv lösen:

Code:
public static void split(int zahl) {
	if(zahl > 0) {
		split(zahl / 10);
		System.out.println(zahl % 10);
	}
}

Funktioniert aber nicht mit negativen Zahlen.
 
wieso nicht so etwa
Code:
while (zahl > 0) {
  ziffer = zahl % 10;
  // Ausgabe der Ziffer
  zahl = zahl / 10;
}
 
DerEineDa schrieb:
Das ist nun nicht effizient oder elegant, aber man kann das auch rekursiv lösen:

Code:
public static void split(int zahl) {
	if(zahl > 0) {
		split(zahl / 10);
		System.out.println(zahl % 10);
	}
}

Funktioniert aber nicht mit negativen Zahlen.


bei solch kleinen programmen isses vernachlässigbar auf die effizienz zu achten^^
bei großen programmen verstehe ich es :D
aber hier jedoch nicht
 
@1668mib

Weil die Ausgabe dann rückwärts ist. Allerdings hat Alcatraz ja auch nicht gesagt, dass es richtig rum sein muss, deswegen geht das natürlich genauso gut :) Das war auch meine erste Lösung, aber weil es eben rückwärts ist, hab ich das rekursiv gemacht. Ansonsten kann man die Zahlen ja auch zuerst auf einen Stack legen und dann den Stack ausgeben...
 
Hab da nochmal etwas drüber nachgedacht. Ich dachte mir, wenn man das in einem Array abspeichern will, dann muss man ja wissen, wieviele Stellen die Zahl hat, die man splitten möchte. Dafür hab ich mal eine eigene Methode entwickelt, die die Anzahl der Stellen einer Zahl ermittelt. Mit der Information erstelle ich dann ein Array, das ich von hinten nach vorne iterativ mit den Ziffern fülle. Funktioniert sogar mit negativen Zahlen :)

Code:
public static int laenge(int zahl) {
	int teiler = 1;
    	int stellen = 0;
    	
    	while(zahl / teiler != 0) {
    		++stellen;
    		teiler *= 10;
    	}
    	
    	return stellen;
}

public static void main(String[] args) {
    	int zahl = 2345;
    	int stellen = laenge(zahl);
	
	int[] arr = new int[stellen];
		
	for(int i = 0; i < stellen; ++i) {
		arr[arr.length - 1 - i] = zahl % 10;
		zahl /= 10;
	}
		
}

Danach ist dann das Array in richtiger Reihenfolge mit den Ziffern gefüllt.
 
Wo wir schon bei Effizienz sind - wieso nicht ein Array mit maximal möglichen Integer-Stellen erstellen? ^^
 
Die Stellen einer Zahl bekommt man übrigens auch einfach durch den Logarithmus zur Basis 10. Man muss nur die 0 abfangen und negative Zahlen mit -1 multiplizieren.
 
samotyr schrieb:
Die Stellen einer Zahl bekommt man übrigens auch einfach durch den Logarithmus zur Basis 10. Man muss nur die 0 abfangen und negative Zahlen mit -1 multiplizieren.

"Übrigens" ist das wohl die eleganteste Lösung - genau dafür ist der Logarithmus ja da: um die Potenz einer Zahl zu einer Basis herauszufinden.
 
DerEineDa schrieb:
Hab da nochmal etwas drüber nachgedacht. Ich dachte mir, wenn man das in einem Array abspeichern will, dann muss man ja wissen, wieviele Stellen die Zahl hat, die man splitten möchte.
Warum so kompliziert. Einfach eine ArrayList hernehmen und wenn man am Ende wirklich ein reines Array haben will, dann die toArray()-Methode verwenden.

Ungefähr so:
Code:
int zahl = 2345;
List<Integer> list = new ArrayList<Integer>();	

while (zahl > 0) {
  list.add(0, zahl % 10);
  zahl = zahl / 10;
}

int[] array = list.toArray();
 
Zuletzt bearbeitet:
In Java geht das so direkt leider nicht. Du kannst nur
Code:
Integer[] array = (Integer[])list.toArray();
machen. Das ist also der Integer-Objekttyp und nicht der primitive Datentyp int. Um tatsächlich ein int-Array zu kriegen muss man manuell in ner Schleife aus dem Integer-Array bzw. (was wohl schneller ist) direkt aus der ArrayList rauskopieren, in etwa so:
Code:
int i;
int[] array  = new int[list.size()];
for(i = 0; i < array.length; ++i){
	array[i] = list.get(i).intValue();
}
 
Zuletzt bearbeitet:
Ja ok, hab mir schon gedacht, dass das so direkt nicht klappt. Allerdings sollte der Cast zu Integer[] überflüssig sein, da die toArray()-Methode bereits den richtigen Typ zurückliefert.
 
Zurück
Oben