Anzahl von gleichen Werten in einem Int-Array ermitteln

Voldemort92

Mitglied
Guten Abend!

Ich habe einen Integer-Array, in dem sich mehrere Werte der Größe nach sortiert befinden.
Ich möchte nun zählen, wie oft sich welcher Wert im Array befindet, und die Ergebnisse (Wert + Anzahl) in einen zweiten Array kopieren.

Ich habe aber Probleme mit der folgenden Schleife (Variablennamen habe ich zum leichteren Verständnis angepasst). Diese soll sich jeden einzelnen Wert angucken und mit dem nachfolgenden Wert vergleichen. Sind sie unterschiedlich, bedeutet das ja dass für den aktuellen Wert "fertig gezählt" wurde, also wird der Wert und seine Anzahl in ein zweites Array übertragen und das ganze soll mit dem nächsten Wert fortgesetzt werden. Ich bekomme nun aber eine ArrayIndexOutOfBoundsInception für die if-Schleife, und habe keine ahnung woran es liegt.
Habe auch schon Schritt für Schritt die Veränderung der Variablen aufgeschrieben um zu gucken wo etwas außer Kontrolle gerät, aber eigentlich müsste alles klappen. Hat jemand ne Idee?

Code:
    for(int i = 0; i < intArray.length; i++)
    {
        while(gleicheZahl = true)
        {
            zaehler++;
            if(intArray[i] != intArray[i+1])
            {
                gleicheZahl = false;
                break;
            }
            i++;
        }
        ausgabeArray[i][0] = helfbild[f];
        ausgabeArray[i][1] = zaehler;
        zaehler = 0;
    }

edit: Jetzt wo ich meinen Post noch mal gegenlese, merke ich dass das break nur die if-Schleife und nicht die while-Schleife beendet... daran könnte es liegen... wird gleich mal getestet.
edit2: Hm, ist zwar leicht falsch, aber dürfte kein Grund für den ausgegebenen Fehler bedeuten...
 
Zuletzt bearbeitet:
Hallo,

deine for-Schleife geht alle Werte von i = 0 bis i = Länge - 1 durch, d.h. genau alle gültigen Array-Indizes. Weiter unten steht aber einmal [i + 1], womit du über den Rand des Arrays hinausliest, wenn i gerade den letzten Wert hat. Je nachdem, wie dein Algorithmus funktioniert, wäre eine Lösung, dass du i in der for-Schleife nur bis Länge - 2 laufen lässt, d.h. als Bedingung i < intArray.length - 1 nimmst.

PS: if-Schleifen gibt es nicht, da ein if niemals für eine mehrfahre Ausführung sorgen kann. Es handelt sich um eine if-Anweisung. Deshalb beendet ein break auch nie ein if.
 
Zuletzt bearbeitet:
Habe es mal korrigiert. Der entsprechende Fehler kommt nun auch nicht mehr, allerdings habe ich scheinbar irgendwo eine Abbruchbedingung verhunzt, das Programm läuft und läuft jetzt nur noch, ohne Ausgabe.

Neuer Code:
Code:
    for(int i = 0; i < intArray.length; i++)
    {
        while(gleicheZahl = true)
        {
            zaehler++;
            if(f != intArray.length - 1)
            {
                if(intArray[i] != intArray[i+1])
                    gleicheZahl = false;
                if(intArray[i] == intArray[i+1])
                    i++;
            }
            else gleicheZahl = false;

        }
        ausgabeArray[i][0] = intArray[f];
        ausgabeArray[i][1] = zaehler;
        zaehler = 0;
        gleicheZahl = true;
    }

PS: if-Schleifen gibt es nicht, da ein if niemals für eine mehrfahre Ausführung sorgen kann. Es handelt sich um eine if-Anweisung. Deshalb beendet ein break auch nie ein if.

Ist natürlich richtig, das break war auch eigentlich für die while-Schleife gedacht 🙂
 
Java:
        while(gleicheZahl = true)

Das ist eine Endlosschleife, weil "gleicheZahl = true" eine Zuweisung und kein Vergleich ist - eine Zuweisung hat immer den Wert des zugewiesenen Wertes, d.h. da steht mit anderen Worten while(true). Du meintest vermutlich:

Java:
while(gleicheZahl == true)

was sich auch kürzer schreiben lässt:
Java:
while(gleicheZahl)
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben