# Werte im Array zählen



## GAST (11. Jan 2008)

Hallo,
ich versuche die ganze Zeit eine Methode zu schreiben, die die Anzahl der gleichen Werte im Array zählt und diese Anzahlt in ein anderes Array schreibt!
Aber irgendwie klappt es noch nicht ganz, kann mir jemand weiterhelfen?
Oder hat jemand einen besseren Vorschlag?!

Hier meine Methode:

```
int wieOft = 0;
                
                for(int i = 0; i < 999; i++)
                {
                    int y=i;
                    if(gefundeneWerteZumAusgeben[i]!= 0)
                    {
                        for(int j = y+1; j < gefundeneWerteZumAusgeben.length+1; j++)
                        {
                            if(i<999 && gefundeneWerteZumAusgeben[i] == gefundeneWerteZumAusgeben[j])
                            {
                                wieOft++;  
                                gleichheit[i] = wieOft;
                                //System.out.println(gefundeneWerteZumAusgeben[i]+" "+wieOft);                                
                                break;
                            }
                            else
                            {
                                wieOft = 1;
                                gleichheit[i] = wieOft;
                                //System.out.println(gefundeneWerteZumAusgeben[i]+" "+wieOft);
                                break;
                            }
                        }
                    }    
                }
```

Gruss


----------



## Gast (11. Jan 2008)

Was ich noch vergessen habe zu sagen, der Array mit den Zahlen ist aufsteigend sortiert!


----------



## SlaterB (11. Jan 2008)

welchen Sinn hat die 999?
was bedeutet das gleichheit-Array?

gib bitte ein Beispiel-Array und was du darin gezählt haben möchtest


----------



## lhein (11. Jan 2008)

```
HashMap<Integer, Integer> doppelteWerte = new HashMap<Integer, Integer>();
        int[] array = new int[] {1, 1, 3, 5, 5, 5, 7, 8, 9, 9, 9, 9};
        
        Integer key = null;
        Integer value = null;
        for (int i=0; i<array.length; i++)
        {
           key = array[i];
           if (doppelteWerte.containsKey(key))
           {
               value = doppelteWerte.get(key);
               value++;
               doppelteWerte.put(key, value);
            }       
            else
            {
               doppelteWerte.put(key, 1);
            }
        }
        
        Iterator<Integer> it = doppelteWerte.keySet().iterator();
        while (it.hasNext())
        {
            key = it.next();
            value = doppelteWerte.get(key);
            System.out.println("Wert " + key + "  kommt " + value + " mal vor.");
        }
```

Der Code setzt mind. Java 5 voraus.

lr


----------



## Niki (11. Jan 2008)

Ich bin mir sicher du hast jetzt seine Hausaufgabe gelöst


----------



## lhein (11. Jan 2008)

Niki hat gesagt.:
			
		

> Ich bin mir sicher du hast jetzt seine Hausaufgabe gelöst



Die Frage ist nur, ob er den Code auch erklären kann, wenn der Lehrer fragt warum es so gelöst wurde 

lr


----------



## Gast (11. Jan 2008)

Leider ist es nicht meine Hausaufgabe, das ist für mein Projekt!
Aber trotzdem Vielen Dank!


----------



## gast08 (11. Jan 2008)

ist ja egal ob es Hausaufgabe oder Projekt ist - verstehen muss mans - was ist wenn mal was geändert werden muss.


----------



## Gast (11. Jan 2008)

Ich hab es soweit verstanden, doch mein Problem ist es jetzt, dass die Werte mit der Anzahl nicht aufsteigend ausgegeben werden?!

Wie kann ich das jetzt sortieren mit der dazugehörigen Anzahl?


----------



## lolkind (11. Jan 2008)

Such mal im Forum nach sortierverfahren, da findest du 100pro etwas dazu!

PS: Thread Abharken (Links unten)


----------



## Guest (11. Jan 2008)

Ein normales array zu sortieren ist einfach, hier z.B.


```
for(int i = gefundeneWerteZumAusgeben.length-1; i >= 0; i--)
{
   for(int j = 0; j < i; j++)
   {
        if(gefundeneWerteZumAusgeben[j] > gefundeneWerteZumAusgeben[i])
        {
             double a = gefundeneWerteZumAusgeben[i];
             gefundeneWerteZumAusgeben[i] = gefundeneWerteZumAusgeben[j];
             gefundeneWerteZumAusgeben[j] = a;
         }   
    }
}
```

Du brauchst nicht sofort so unfreundlich zu werden, mit thread abhacken, wenn du es weisst, dann gibt mir doch ein Hinweis!

Das Problem hier ist, dass es kein normales array ist, dass ich sortieren kann, außerdem hat es noch die dazugehörige Anzahl an Gleichheit, die nicht vertausch werden muss!


----------



## Körby (11. Jan 2008)

Probier mal sowas oder so ähnlich...


```
int[] array2  = new int[array.length]
for(int i = 0; i < array.length; i++)
{
    x = i;
    for(int j = 0; j < array.length; j++)
    {
        if(array[x] == 0 && array[j] != 0)
        {
                x = j;
        }
        else if(array[x] > array[j] && array[j] != 0)
        {
            x=j;
        }
    }
    array2[i] = array[x];
    array[x] = 0;
}
```


----------



## Gast (11. Jan 2008)

Danke, habs raus man muss anstatt HashMap TreeMap benutzen, dieser sortiert automatisch!


----------



## Guest (11. Jan 2008)

Gast hat gesagt.:
			
		

> Danke, habs raus man muss anstatt HashMap TreeMap benutzen, dieser sortiert automatisch!


TreeMap hat aber ein schlechteres Komplexitätsverhalten als HashMap.

Da Du ja die Werte sortiert reinsteckst, kannst Du auch eine LinkedHashMap verwenden. Probier's mal.


Fred


----------

