Wie kann ein Zahl in ein Array von Ziffern überführt werden?

4 Antworten

Java hat vermutlich keinen Operator, um eine Ganzzahldivision mit Rest auszuführen. Die Idee ist eigentlich eien Ganzzahldivision mit Rest auszuführen:

123:10 ist 12 rest 3. Also ist 3 die letzte Ziffer. nun 12:10 ist 1 Rest 2. nächste Ziffer. Das kannst Du also in einer Schleife über beliebig lange Zahlen machen.

Code:
import java.util.Arrays;

public class NumToArr {

public static void main(String[] args) {
int num = 5649721;
int[] numArr = numToArr(num);
System.out.println(Arrays.toString(numArr));
}

private static int[] numToArr(int num) {
if(num == 0) {
return new int[] { 0 };
} else if (num < 0) return null;

int[] numArr = new int[(int)(Math.log10(num)+1)];
for (int i = numArr.length - 1; num > 0; --i) {
numArr[i] = num % 10;
num /= 10;
}

return numArr;
}

}
Erläuterung:

Die Zahl wird zunächst an eine Methode übergeben. Anschließend werden die Fälle 0 und negativ ausgeschlossen.

Im Folgenden muss die Länge der Zahl bzw. die Anzahl der Stellen bestimmt werden, was mit dem Logarithmus geschieht. Dies kann man sich folgendermaßen vorstellen:

XXXXX = 10^n <=> n = log10(XXXXX)

Zu diesem Wert muss eins hinzuaddiert werden. Anschließend werden die Nachkommastellen abgeschnitten, indem zu int gecastet wird.

Die for-Schleife beginnt beim hintersten Element und läuft bis zum vordersten durch, indem i dekrementiert wird.  Dabei wird der Rest der Division durch zehn in das Array eingetragen, da dies der hintersten Stelle entspricht. Nun müssen wir die hinterste Stelle entfernen. Dazu teilen wir durch zehn und schneiden wieder die Nachkommastelle durch Casten ab. Sobald die Zahl null ist, sind wir fertig. Bei der Ausgabe des Arrays habe ich geschummelt, könntest du mit einer foreach-Schleife lösen.

Solltest du noch Fragen haben, melde dich gerne!
Zizimiri 
Fragesteller
 12.11.2017, 15:40

Vielen Dank für die Antwort! :)

Für Hausaufgaben können wir leider Math.log.10 nicht anwenden. Und wir dürfen keine Klasse aufrufen.

Das ist die Aufgabe: 

Die eingegebene positive Zahl soll anschließend in ein Array von Ziffern überführt werden, auf dem schließlich die Palindrom-Eigenschaft geprüft wird.

Ich hab diese Code geschrieben:

public class Palina extends MiniJava {
public static void main (String[] args){
int n=0;

do {
write ("Geben Sie eine positive Zahl ein ");
n = read();
} while (n<0);

int [] a; int R; int i=0;
// Die Zahl wird in ein Array von Ziffern überführt.
while ( (n/10) >= 0){
a = new int[i];
R = n%10;
n = n/10;
a[i] = R;
++i;
}

// Palindromtest

int e=0; int j=a.length;  (**)
while (j>e){
if (a[e] != a[j]){
write ("Die Zahl ist nicht Palindrom");
break;
}
else {
++e;
--j;
}
write ("Die Zahl ist nicht Palindrom");
}
}
}

Das Programm kompiliert leider nicht, bei (**) steht 

"The local variable a may not have been initialized".

Danke im Voraus.

0
tavkomann  13.11.2017, 17:25
@Zizimiri

Den Code kann ich jetzt semantisch nicht überprüfen, weil mir die Klasse MiniJava nicht zur Verfügung steht. Den Fehler kannst du beseitigen, indem du a initialisierst, z.B. mit null:

int [] a = null; int R; int i=0; 
0

Zahl modulo zehn ans Ende des arrays, dann ganzzahlige division durch zehn, dann wiederholen. 

public static int[] int2array(int num){
int n = (int)Math.floor(Math.log10(num)+1), i = n - 1;
int[] arr = new int[n];
do{
arr[i--] = num % 10;
}while((num /= 10) > 0);
return arr;
}