Java Array ober und Untergrenze?


14.06.2021, 21:49

Die Methode sortierungsbegrenzung wird aufgerufen


14.06.2021, 22:05

Die Method sortierungsbegrenzung(zf, 5, 8); soll aufgerufen werden

vor dem aufrufen:

1	2	3	10	9	8	7	6	5	4

nach dem aufrufen

1	2	3	10	6	7	8	9	5	4

beim aufrufen der Methode soll der Bereich in dem die ober und unter grenze fest gelegt ist sortiert werden.

in dem fall

1 2 3 10 9 8 7 6 5 4

das das die zahlen in der array sind von unter bis obergrenze.

Xearox  14.06.2021, 21:58

Was genau soll die Methode denn machen? Kannst du bitte ein Beispiel hinzufügen, was als Ergebnis ausgegeben werden soll?

jasper244 
Fragesteller
 14.06.2021, 22:05

so?


3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

So mal als Beispiel unten , wie du siehst, sortierst du maximal genau 1 Wert .

Du musst das noch für alle anderen werte machen .

public class HelloWorld{
     public static void main(String []args){
        int zf[];
        zf = new int[11];
        zf[1] = 1;
        zf[2] = 2;
        zf[3] = 3;
        zf[4] = 10;
        zf[5] = 9;
        zf[6] = 8;
        zf[7] = 7;
        zf[8] = 6;
        zf[9] = 5;
        zf[10] = 4;
        sortierungsbegrenzung(zf,1,10);

    System.out.println("Hello World");
     }
    static   private void tauschen(int b[], int k, int t)
    {               
        int x;
        x = b[k-t];
        b[k-t] = b[k];
        b[k] = x;
    }
     static  private void sortierungsbegrenzung( int a[], int untergrenze, int obergrenze)
        {
             int i, j, n = (obergrenze-untergrenze)-1;  
             int x;
            for ( i = (untergrenze+2); i <= n; i++ )      
            {    
                boolean getauscht = false;
                for (j = n; j >= i; j-- )           
                {                
                    if ( a[j-1] > a[j] )           
                    {
                        tauschen(a, j, 1);
                        getauscht = true;
                    }
                } /*end for*/
                if (!getauscht)
                {
                    break;
                }
               // zfAusgeben(zf);
                for ( int ii = 1; ii < 11; ii++ )      
                {
                    System.out.print(" "+a[ii]);
                }
               System.out.println(" ");
            } /*end for*/
        }

}

Ausgabe:

$javac HelloWorld.java
$java -Xmx128M -Xms16M HelloWorld
 1 2 3 6 10 9 8 7 5 4 
 1 2 3 6 7 10 9 8 5 4 
 1 2 3 6 7 8 10 9 5 4 
 1 2 3 6 7 8 9 10 5 4 
Hello World
jasper244 
Fragesteller
 15.06.2021, 21:44

Leider wird hier nicht zwischen der ober und untergrenze sortier bei mir kommt garnichts herraus

0
TechPech1984  15.06.2021, 21:50
@jasper244

tja, da kann ich nichts machen , fakt ist, schon von deiner logik her , du gesht alle buchsteaaben durch , aber tauscht genau 1 mal bei jeder position , danach brichst du die sortierung ab . somit kann was am ende ist nicht an den anfang wandern . deine sortierung hört einfach viel zu früh auf .

                if (!getauscht)
                {
                    break;
                }

ist halt so falsch .

0
jasper244 
Fragesteller
 15.06.2021, 21:56
@TechPech1984

wie soll ich es den richtig machen deswegen frag ich ja um hilfe

0
TechPech1984  15.06.2021, 21:58
@jasper244

ich würde den code mal dokumentieren , dann gehst du den mal schritt für schritt mit zettel und papier durch und guckst dir mal an was du da eigentlich machst . dann soltle dir der fehler auffallen .

0
jasper244 
Fragesteller
 15.06.2021, 22:05
@TechPech1984
    private void sortierungsbegrenzung( int a[], int untergrenze, int obergrenze)
    {
             int i, j, n = obergrenze;  
             int x;
            for ( i = untergrenze; i <= n; i++ )      
            {    
                boolean getauscht = false;
                for (j = n; j >= i; j-- )           
                {                
                    if ( a[j-1] > a[j] )           
                    {
                        tauschen(a, j, 1);
                        getauscht = true;
                    }
                } /*end for*/
                if (!getauscht)
                {
                    break;
                }
               zfAusgeben(zf);
            } /*end for*/
    }

hab es Danke für den Tipp

0

Du solltest mal dein Code dokumentieren und irgendwie ein funktionierendes beispiel haben , ggf , die fehlermeldungen die du da eerzeugst .

 int a[],
 tauschen(zf, j, 1);
 zfAusgeben(zf);

was wird bei a[] übergeben

wieso geht bei tauschen etwas auf zf , was gar nciht in der funktion ist.

wo ist die zfAusgaben hingekommen ?

jasper244 
Fragesteller
 14.06.2021, 21:50

Ich hab die Frage eben nochmal Korregiert

0

Was mir als erstes auffällt, dein Array fängt nicht bei 0 an, sollt es aber ;-)

Als nächstes, ich bin absolut kein Fan davon, wenn man alles mit nur einzelnen Buchstaben macht. Du hast zwar ein paar aussagekräftige Variablen, aber das wars auch schon.

Außerdem wäre eine Dokumentation, gut, was die Funktion eigentlich machen sollen. Hast du im nachhinein nachgetragen, ist aber immer noch nicht perfekt ;-)

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung