Wieso kann ich als Index für einen Array einen Char angeben?

phili3

Mitglied
Hallo, es geht hierbei nicht um den Inhalt des Codes:
Java:
public class solution {


        public int longestPalindrome(String s) {
            int[] count = new int[256];
            int odds = 0;
            for (int v = 0; v < s.length(); v++) {
                char currChar = s.charAt(v);
                count[currChar] += 1;
                odds += (count[currChar] & 1) == 1 ? 1 : -1;
            }
            return s.length() - odds + (odds > 0 ? 1 : 0);
        }

}

Meine Frage ist, wieso count[currChar] += 1; funtkioniert.
Danke
 
Erst einmal erwartet Java im Array Operator ein int. Somit kannst Du einen int oder alles, was sich direkt ohne Angabe eine Casts in einen int umwandeln lässt, angeben.

Und da char eine 16 bit Zahl ist, ist dies ein möglicher, impliziter cast, der in der Java Spezifikation vorgesehen ist.
 
Grundsätzlich ist erstmal alles im Computer eine Zahl, und Zahlen mit niedrigerer Bitbreite (wie z.B. ein char mit 16Bit) sind problemlos in Zahlen mit mehr Bitbreite umwandelbar (wie z.B. ein int mit 32Bit).
Und Java ist clever genug, da zwischen sinnvollen und sinnlosen Casts zu unterscheiden. In C würde sowas auch gehen, aber in C kannst du auch ein boolean zu einem int casten und umgekehrt. Wird/wurde gerne gemacht, und hat teilweise schlimme Programmfehler und Sicherheitslücken gebracht.

Das ein char für Zeichendarstellung verwendet wird geht, weil es da eine Tabelle gibt die jedem Zeichen einen Zahlenwert eineindeutig zuordnet, weshalb Zeichenoperationen (wie z.B. alphabetisches Sortieren, Umwandlung von Groß- in Kleinbuchstaben, usw) auf relativ primitive Rechenoperationen zurückgeführt werden können. Mehr als Rechnen kann ein Rechner nunmal nicht, deshalb heißt er ja auch so.
 
die Zeilenanzahl[currChar] += 1; funktioniert, weil es die Anzahl der aktuellen Zeichen im Zählarray erhöht. Dadurch kann der Code verfolgen, wie oft jedes Zeichen in der Eingabezeichenfolge vorkommt. Das Count-Array wird später verwendet, um die Anzahl der Zeichen mit ungerader Anzahl zu bestimmen, was für die Berechnung der Länge des längstmöglichen Palindroms unerlässlich ist.
 

Neue Themen


Zurück
Oben