Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
JavaDezimalstellen einer Natürlichen Zahl ermitteln
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 ^^
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.
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.
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.
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();
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();
}
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.