Wie kann ein Zahl in ein Array von Ziffern überführt werden?
Hallo, Wie kann ein Zahl in ein Array von Ziffern überführt werden (in Java), OHNE die Zahl zu keinem Zeitpunkt in einen String umgewandelt werden. Danke im Voraus.
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.
import java.util.Arrays;Erläuterung:
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;
}
}
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!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.
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;
}
Der Modulo-Operator (%) ist ein Operator, der in vielen Sprachen bekannt ist. Auch in Java.