EIDI-Crashkurs 2020 › Aufgabe 108
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 9 Monaten von Stefan Berktold.
-
AutorBeiträge
-
Amelie Lemmen
Ich habe eine Frage zu Aufgabe 108. Dort wird ja mit chars() ein IntStream über die Zeichen von hex gebildet. Wieso wird in der Lösung folgender Schritt gemacht: return digit – ‘0’; ? Ich verstehe “-‘0′” in diesem Zusammenhang nicht. Danke im Voraus!
Dieser Schritt wird gemacht, um das Zeichen (z. B.
'4'
) in eine Ziffer (z. B.4
) umzuwandeln.Hintergrund:
int c = '4'; System.out.println(c);
Dieser Code gibt den Wert 52 aus, weil 52 der ASCII-Wert des Zeichens ‘4’ ist und wir das Zeichen in einer int-Variable speichern. Genauso sieht das auch bei der chars()-Methode aus. Diese gibt dir keinen
CharStream
(diese Klasse existiert nicht) sondern einenIntStream
. Um aus dem Zeichen ‘4’ (welches im Stream als 52 gepseichert ist) nun die “richtige” Ziffer 4 zu machen, müssen wir das Zeichen ‘0’ subtrahieren. Dazu muss man die ASCII-Werte nicht kennen – es genügt zu wissen, dass die Entfernung zwischen ‘4’ und ‘0’ genau 4 beträgt. Das kannst du aber auch an der ASCII-Tabelle sehen. ‘4’ hat den Wert 52, ‘0’ hat den Wert 48, 52-48 ergibt 4. Genauso wäre das bei Buchstaben. Um aus einem Keinbuchstaben einen Großbuchstaben zu machen schreibt manc-'a'+'A'
, d. h. man subtrahiert erst das kleine a, um den Offset (Entfernung des Zeichens zum kleinena
) zu kennen (bspw. 3, falls c ein'd'
ist) und addiert diesen Offset dann zum großenA
(z. B.'A'+3
=='D'
). -
AutorBeiträge