hi, du kannst auch +'0 schreiben. würde genauso gehen. das ist sozusagen ein cast zum char, deswegen wird ein char subtrahiert oder addiert und somit wird dann auch ein char draus. du kannst aber auch +5 addieren, sollte eigentlioch auch funzen
sorry Math55 aber was du erzählst ist völliger Blödsinn.
Da wird nichts implizit gecastet.
Die Methode charAt gibt einen char zurück und '0' ist ein Literal für einen char.
Das bedeutet, dass beide Operanden vom Typ char sind. Also muss nichts gecastet werden.
Wenn gecastet werden muss, wird immer zu dem Datentyp hin gecastet, welcher
der Größerer ist. Also zum Beispiel:
char + int -> int + int
Der Grund warum '0' subtrahiert wird liegt der Art wie die ASCII Tabelle aufgebaut ist.
Ein Zeichen nämlich '0' hat den nummerischen Wert 48. Würde man also einfach charAt(i)
in das Array einlesen so würde man Werte bekommen die um 48 zu hoch sind. Deswegen zieht
er im Code die 48 ab. Würde man aus dem - ein + machen wären die Werte anschliessend um 96 zu hoch.
Man kann die Umwandlung von ASCII in nummerische Werte auch dadurch erreichen, indem man die Bits,
welche die 48 repräsentieren ausblendet.
Hier ein paar Beispiele wie man es machen kann
Code:
public class MainTest {
public static void main(String[] args) {
String zahl = "1290";
int[] array = new int[zahl.length()];
for (int i = 0; i < zahl.length(); i++) {
array[i] = zahl.charAt(i) - '0';
System.out.println(i + " : " + array[i]);
}
System.out.println(""); // Leerzeile verbessert die Ausgabe
for (int i = 0; i < zahl.length(); i++) {
array[i] = zahl.charAt(i) ^ 48; // Bitmanipulation XOR
System.out.println(i + " : " + array[i]);
}
System.out.println(""); // Leerzeile verbessert die Ausgabe
// Hier kommt nur Schrott raus
for (int i = 0; i < zahl.length(); i++) {
array[i] = zahl.charAt(i) + '0';
System.out.println(i + " : " + array[i]);
}
}
}