Denkfehler in verschachteltem for

m²labs

Mitglied
Guten Morgen euch allen,
ich soll hier ein CountingSort schreiben und scheitere irgendwie an der Stelle, die das Originalarray mit dem Wertebereich vergleichen soll. Hab wohl nen einfachen Denkfehler drin, seh ihn aber leider nicht selbst.

Hier mein Code bisher (Das problem beginnt in Zeile 37):
Java:
import java.util.Arrays;

public class CountingSort
{
    public static int[] count(int[] a)
    {
        int maxValue=0;
        System.out.println(Arrays.toString(a));

        for(int i=0;i<a.length;i++)
        {
            if (a[i]>maxValue)
            {
                maxValue=a[i];
            }
        }
        System.out.println(maxValue);
        
        int minValue=maxValue;
        for (int h=0;h<a.length;h++)
        {
            if(a[h]<minValue)
            {
                minValue=a[h];
           }
        }
        System.out.println(minValue);
        
        int[] b= new int[maxValue+1-minValue];
        
        for(int j=0;j<b.length;j++)
        {
            b[j]=minValue+j;
        }
        System.out.println(Arrays.toString(b));
        
        int[] c=new int[b.length];

        for (int k=0;k<b.length;k++) //Führt für jedes Element von b die nächste Schleife aus    
        {
            for(int l=0;l<a.length;l++) //Führt das If für jedes Element von a aus
            {
                
                if (a[l]==b[k])
                {
                    int counter=0;
                    counter++; //Zählt die Häufigkeit des jeweiligen Wertes
                    c[k]=counter; //Speichert die Häufigkeit in c
                }
                
            }
        }
        System.out.println(Arrays.toString(c));
        return c;
    }
}


Die Konsole gibt mir folgendes aus:

[5, 7, 5, 10, 4, 3, 25, 2, 5, 9, 5, 3, 3, 5, 5, 4] //Eingabe Array, stimmt
25 //maxValue, stimmt
2 //minValue, stimmt
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] //Wertebereich, stimmt
[1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] //Häufigkeit, erkennt scheinbar jedes Element nur einmal


Wäre klasse, wenn mir da jemand ein Beutelchen Erleuchtung spendieren würde.

Bis dahin Grüße,
Markus
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
        for (int k=0;k<b.length;k++) //Führt für jedes Element von b die nächste Schleife aus    
        {
            for(int l=0;l<a.length;l++) //Führt das If für jedes Element von a aus
            {
                if (a[l]==b[k])
                {
                    int counter=0;
                    counter++; //Zählt die Häufigkeit des jeweiligen Wertes
                    c[k]=counter; //Speichert die Häufigkeit in c
                }
            }
        }

[1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] //Häufigkeit, erkennt scheinbar jedes Element nur einmal

Ist ja auch klar .. weil der Counter bei jedem Durchlauf der inneren Schleife bei 0 beginnt und um 1 erhöht wird und dann abgespeichert wird. Somit kann dieser Wert max 1 werden. Du musst den vorhandenen Wert erhöhen!
 

m²labs

Mitglied
Aha,
habs jetzt so und dann funzt das auch:
Java:
 int[] c=new int[b.length];
        for (int k=0;k<b.length;k++)
        {
            int counter=0;
            for(int l=0;l<a.length;l++)
            {
                
                if (a[l]==b[k])
                {
                    
                    counter++;
                    
                }
                
            }
            c[k]=counter;
        }

Vielen Dank für die schnelle Hilfe.
 

Ähnliche Java Themen

Neue Themen


Oben