[Java] Int in Array speichern

madbros

Lt. Junior Grade
Registriert
Juni 2004
Beiträge
328
Mahlzeit,

kleines Problem:

kann ich in Java die einzelnen Ziffern einer Integer-Zahl in ein Array speichern, um dann die Ziffern einzeln zu manipulieren, z.B. der dritten Ziffer einer 6-stelligen Zahl gezielt einen anderen Wert zuzuweisen?

Wenn ja, wie?

Im Java-API habe ich nichts passendes gefunden, vielleicht aber auch nur übersehen...
 
Zuletzt bearbeitet:
Code:
String zahlString;
int x = 12;
zahlString = String.valueOf( zahl );
zahlString ist jetzt genau 2 Buchstaben lang mit den Ziffern 1 und 2.

Das ist doch was du wolltest?

(Steht in der API-Doku bei der Klasse java.lang.String)
 
int x = 123; // deine Zahl
String str = String.valueOf(x); // x in einen string verwandeln
int[] array = str.split(""); // müsste die zahlen trenne und in ein array reihen
 
nein, tuts leider nicht. beides.

1. Geht nicht, weil Strings nicht mehr veränderbar sind.
2. irgendwas mit inkompatiblen Typen.

ich hab was gelesen über eine java-klasse Integer (Teil von java.lang). das api sagt dazu , dass man damit tatsächlich eine Zahl ziffernweise in ein int-Array packen kann. leider verstehe ich nicht, wie man das Teil aufruft. wenn ich

int x = 12345;
Integer(x);

aufrufe, erzählt mir BlueJ, er könnte die Methode Integer nicht finden. Wie benutze ich das Integer()?
 
Code:
class IntToArray {
	public static void main(String args[]) {
		
		int iZahl = 123;
		String sZahl = String.valueOf(iZahl);
		int len = sZahl.length();
		int[] aZahl = new int [len];
				
		for (int i=len-1; i>=0; i--) {
			aZahl[i] = iZahl % 10;
			iZahl /= 10;			
		}
		
		for (int i=0; i < len; i++) {
			System.out.println(aZahl[i]);
		}
	}
}

QnD! :)
 
Warum so kompliziert?

Code:
int zahl = 123;
String buf = Integer.toString(zahl);
int[] array = new int[buf.length()];
for( int i=0; i < buf.length(); i++ ) {
  array[i] = Character.getNumericValue(buf.charAt(i));
}
 
Zuletzt bearbeitet:
ich mach mal'n neuen Thread auf... na gut vielleicht doch nicht... hat irgendwer zurückverschoben...
 
Zuletzt bearbeitet:
[Java] Array in Int

also, ein int in ein array hab ich hingekriegt, aber wie kriege ich jetzt das Array zurück in eine Zahl?

Im Moment habe ich eine sehr umständliche Lösung mit Addition und Multiplikation... also [1][2][3] ist ja 123 und wird mittels for-Schleife so zurückgerechnet: zahl = 3*1 + 2*10 + 1*100.

Das erscheint mir durch die Multiplikation sehr langsam, diese Methode wird unter Umständen einige hundertausend mal ausgeführt. Gibt's 'ne elegantere, schnellere Lösung?
 
AW: [Java] Array in Int

Du kannst den String mit Integer.parseInt(String s) in einen Integer umwandeln

edit: glaub ich hab dich falsch verstanden - wäre nur hilfreich wenn du im array Zeichen hättest, du hast aber int-Werte, oder?
 
Zuletzt bearbeitet:
ja... ich kann doch z.B. an STrings mit concat Zeichen ahängen. geht das nicht auch irgendwie mit ints
 
Ich weiss es nicht, aber ich habe das Gefühl, dass Du irgendwie einen riesigen Umweg machst um dein Ziel zu erreichen.
Wenn Du lediglich eine Ziffer einer Zahl manipulieren möchtest, so lässt sich das doch auch rein rechnerisch erledigen, z.B.:

int i = 123;
int zehner = (i % 100) / 10; // Gibt 2
i -= zehner * 10; // 2 er wegnehmen
i += 4 * 10; // durch 4-er ersetzen => i = 143

Das ganze geht auch generisch, z.B.:

int getDigit(int from, int pos) {
// Eingabewerte sollten hier noch überprüft werden => Exception bei illegalen Werten
return (int) ((from % (Math.pow(10, pos) ) ) / (Math.pow(10, pos - 1));
}

int setDigit(int from, int pos, int newDigit) {
// Eingabewerte sollten hier noch überprüft werden => Exception bei illegalen Werten
int tmp = from;
tmp -= (int) getDigit(from, pos) * Math.pow(10, pos - 1);
tmp += (int) newDigit * Math.pow(10, pos - 1);
return tmp;
}

Habe den Code nicht überprüft, gibt sicher noch einige Fehler, aber er soll ja auch nur einen Ansatz liefern. Die Position bezöge sich hier auf die Stelle vom Ende der Zahl gerechnet, also 1 für Einser, 2 für Zehner, 3 für Hunderter, usw.
Finde ich zumindest etwas Einfacher, als das Ganze zuerst in einen String, dann wieder in eine Zahl umzuwandeln...
 
das hatte ich am Anfang so ähnlich, leider ist das noch langsamer. Trotzdem danke für Deine Idee.

Noch jemand anders?
 
Zurück
Oben