Inhalt von Arrays vergleichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Inhalt von Arrays vergleichen

    Hi @all,

    ich habe folgendes Feld gegeben (4x4-Matrix)

    int Matrix [][] = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}};

    Nun möchte ich die Häufigkeiten feststellen. Also wie oft die einzelnen Zahlen da drin sind (sind ja einige mehrmals vorhanden). Also wie vergleiche ich(jede zahl mit jeder) und wie speichere ich den wert des vergleichs??

    dank

    LinuxMan88
  • Ich hab mal schnell eine Lösung in Java 5 erstellt. Diese ist nicht kommentiert, ich hoffe du kennst dich aus :)
    Das Ergebnis wird in einer assoziativen Map gespeichert die als Schlüssel die Zahl hat, und als Wert die Anzahl der Vorkommnisse. Da dort eine TreeMap verwendet wird, ist das Ergebnis gleich nach dem Schlüssel sortiert. Du kannst aber auch eine "normale" HashMap nehmen, nur dass das Ergebnis immer zufällig sortiert ist.
    Beim Einfügen in die Map musst du unterscheiden, ob es schon einen Wert gibt, oder ob ein neuer Wert eingefügt wird. Lass dich nicht durch die Verwendung von "Integer.valueOf" abschrecken. Du kannst genauso gut "new Integer" schreiben.

    Quellcode

    1. public static void main (final String [] a)
    2. {
    3. final int Matrix[][] = { { 34, 255, 255, 56 }, { 127, 204, 11, 34 }, { 123, 98, 127, 34 }, { 34, 34, 127, 17 } };
    4. final Map <Integer, Integer> aMap = new TreeMap <Integer, Integer> ();
    5. for (final int [] aVector : Matrix)
    6. for (final int aValue : aVector)
    7. {
    8. Integer aCount = aMap.get (aValue);
    9. if (aCount == null)
    10. aCount = Integer.valueOf (1);
    11. else
    12. aCount = Integer.valueOf (aCount.intValue () + 1);
    13. aMap.put (Integer.valueOf (aValue), aCount);
    14. }
    15. for (final Map.Entry <Integer, Integer> aEntry : aMap.entrySet ())
    16. System.out.println (aEntry.getKey () + " kommt " + aEntry.getValue () + " mal vor");
    17. }
    Alles anzeigen
    There's no place like 127.0.0.1
  • Hmm, ich würde es wohl ersteinmal so versuchen:

    1. Man gehe jede Stelle der Matrix durch (Stichwort for-schleife[n] )
    2. Man lege ein dynamisches Feld (Stichwort Vector) an und schaut bei jedem Element ob es schon drin ist. Wenn ja, zählt man einen gewissen Zähler hoch. Wenn nein, speichert man das Element in das Feld rein.
    3. Man gebe alle Elemente im Vector mit den dazugehörigen Anzahlen aus (oder was auch immer man damit machen will)

    Soviel zu einer (!) möglichen Vorgehensweise. Es gibt sicherlich elegantere Lösungen, aber das wäre zumindest ein Anfang.

    Wenn du konkrete Fragen zur Implementierung hast, helf ich auch gern weiter, aber versuch das doch vielleicht erst einmal so...


    bye

    //EDIT: da war wohl jemand schneller...
  • Das nachschauen, ob du den Wert bereits hast, habe ich mit einer Map umgesetzt.
    Eine Map ist ein Container (= ein Objekt das 0-n andere Objekte enthält) der einen Wert einem anderen zuordnet.
    So kannst du z.B. abbilden, dass der Wert "D" auf "Deutschland" gemappt wird, und "A" auf "Österreich".
    In deinem Beispiel könntest du also den Wert "gefundene Zahl" auf "Anzahl der Vorkommnisse" mappen - alles klar?

    Das "dynamische Feld", welches mad angesprochen hat funktioniert wie ein Array, nur das der Inhalt später erweitert werden kann. Deinem Array (Matrix) kannst du, nachdem du es einmal mit Werten belegt hast, keine weiteren Werte hinzufügen!

    In welcher Java Version willst du das denn umsetzen? Java 1.4, 1.5 oder 1.6?
    There's no place like 127.0.0.1