Seite 1 von 2

selection sort auf array - "iteration of triangle change"

Verfasst: 1. Jun 2017 17:05
von goerlibe
Hallo, kann mir jemand helfen? Der eine Test bei besagter Aufgabe schlägt fehl und ich habe keine Ahnung woran das liegen könnte bzw ich verstehe gar nicht erst, was iteration of triangle change sein soll.

Hier der Code:

Code: Alles auswählen

public Listobject<T>[] executeSelectionSortOnArray(Listobject<T>[] array) {
    for (int i = 0; i < array.length; i++) {
        
        // find min
        int minIDX = i;
        for(int j = i+1; j < array.length; j++) {
            if(array[j].compareTo(array[minIDX]) < 0) minIDX = j;
        }
        // swap min
        Listobject<T> tmp = array[i];
        array[i] = array[minIDX];
        array[minIDX] = tmp;
    }
    return array;
}
Und hier die Fehlermeldung des Tests:

Failurereport
Testheadder – basicTest_for_sorting_like_selectionsort(array.sort.tests_selectionSort_iterative.TestSelectionSort)
Message – The input sequence was: [13, 41, 32, 510, 23, 130 ] Test failed at iteration of triangle change with index: 0 expected:<130> but was:<13>
Trace – java.lang.AssertionError: The input sequence was: [13, 41, 32, 510, 23, 130 ] Test failed at iteration of triangle change with index: 0 expected:<130> but was:<13> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:118) at array.sort.tests_selectionSort_iterative.TestSelectionSort.basicTest_for_sorting_like_selectionsort(TestSelectionSort.java:196)

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 2. Jun 2017 13:51
von remi jeas
hab den selben Fehler, und auch schon weiter unten nachgefragt, aber keine Antwort bekommen...
Nur mein Code ist etwas anders, ich sortiere nach dem Maximum, du nach dem Minimum

Code: Alles auswählen

public Listobject<T>[] executeSelectionSortOnArray(Listobject<T>[] array)
{
    for(int grenze = array.length; grenze >0; grenze--){
        int max = 0;
        for(int i = 1; i < grenze; i++){
            if(array[max].compareTo(array[i]) < 0){
                max = i;
            }
        }
        Listobject tmp = array[grenze-1];
        array[grenze-1] = array[max];
        array[max] = tmp;
    }
    return array;
}
Also, du bist nicht alleine

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 6. Jun 2017 20:46
von goerlibe
Ich vermisse Guido 😂
Da hätten wir schon nach Minuten ne Antwort gehabt..
Ich finde es eine echt traurig, dass auf Übungsbetrieb verzichtet wird und dann zusätzlich so wenig geholfen wird - wobei es hier ja nicht um Verständnis der Algorithmen geht, sondern ausschließlich um Probleme mit der Aufgabenstellung oder Probleme mit Nabla. Sonst hätte ich ja gar kein Problem das durch externe Literatur zu lernen...

Naja ich hab es jedenfalls auch schon mit max-suche probiert - das hat auch nicht geholfen..

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 6. Jun 2017 22:25
von kommiker
Mein Algorithmus benutzt auch die Max-Suche.
Ich finde es auch sehr schade, dass man als Hilfesuchender seitens der Veranstalter so wenig Hilfe bekommt.

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 8. Jun 2017 13:10
von Aybekz
Habe auch einen ähnlichen Code und kriege die gleiche Fehlermeldung und zusätzlich noch 2 andere, welche mir sagen, dass ich nicht oft genug compareTo aufrufe.

Hier der Code:

Code: Alles auswählen

{
    int last = array.length-1;
    
    while(last > 0){
        int m = 0;
       
        for(int i = 0; i<=last; i++){
            if(array[i].compareTo(array[m]) > 0){
                m = i;
            }
        }
            Listobject<T> tmp = array[last];
            array[last] = array[m];
            array[m] = tmp;
            last--;
    }
    return array;
}

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 10. Jun 2017 21:51
von LukasPhysiker
Ich habe die gleiche Fehlermeldung. Hier ist mein Code:

Code: Alles auswählen

{
    int i,j,max;
    Listobject<T> temp;
    for(i=array.length-1;i>0;i--)
    {
        max = 0;
        for(j=1;j<=i;j++)
        {
            if(array[j].compareTo(array[max]) > 0) max = j;
        }
        temp = array[max];
        array[max] = array[i];
        array[i] = temp;
        
    }
    return array;
}
Ich nehme mal an, dass das mal wieder ein Fehler in den Tests ist. Wäre aber schön eine Bestätigung dazu zu haben und zu wissen dass es gefixt wird.

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 11. Jun 2017 16:33
von Julian Prommer
jup wird gefixed...

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 13. Jun 2017 21:51
von goerlibe
Ich sehe gerade - etwas am test scheint sich geändert zu haben, denn die Fehlermeldung des Tests ist nun minimal anders. Es heißt nun:

Testheadder – basicTest_for_sorting_like_selectionsort(array.sort.tests_selectionSort_iterative.TestSelectionSort)
Message – The input sequence was: [23, 41, 32, 510, 13, 130 ]Triangle-change was wrong. Test failed at iteration with index: 0 expected:<130> but was:<23>
Trace – java.lang.AssertionError: The input sequence was: [23, 41, 32, 510, 13, 130 ]Triangle-change was wrong. Test failed at iteration with index: 0 expected:<130> but was:<23> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) ...

statt

Testheadder – basicTest_for_sorting_like_selectionsort(array.sort.tests_selectionSort_iterative.TestSelectionSort)
Message – The input sequence was: [13, 41, 32, 510, 23, 130 ] Test failed at iteration of triangle change with index: 0 expected:<130> but was:<13>
Trace – java.lang.AssertionError: The input sequence was: [13, 41, 32, 510, 23, 130 ] Test failed at iteration of triangle change with index: 0 expected:<130> but was:<13> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:118) at array.sort.tests_selectionSort_iterative.TestSelectionSort.basicTest_for_sorting_like_selectionsort(TestSelectionSort.java:196) ...

bei immer noch dem gleichen Code


Tja - minimale Unterschiede, leider habe ich immer noch keine Ahnung was ich mit diesem Test anfangen soll. Bspsweise wäre es super, zu erfahren, was denn dieser "triangle change" sein soll? Weder im Video, noch im wiki, noch sonstwo konnte ich dies herausfinden. Nun stellt sich (wie so oft) die Frage: Ist das mein Fehler oder ein Fehler im Test?


PS: So langsam platzt mir echt der Kragen... Wieso werden wir als Beta-Tester eingesetzt und vor allem: Wieso hängt unsere Studienleistung von einem so unsausgereiften, unfairen, ungetesteten, unstabilen, untransparenten (soll ich weiter machen) System ab? Auch gibt es keine/kaum Ansprechpartner, die tatsächlich bei inhaltlichen Problemen mit Nabla/CodeMonkeys helfen. "Wird gefixed" ist leider eine Antwort, die wir hier viel zu oft zu hören bekommen (Nun ja - wenigstens das muss man euch lassen - es verändert sich echt vieles)

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 13. Jun 2017 22:37
von kommiker
Hallo goerlibe,

wie ich bereits erwähnt habe besteht mein Algorithmus alle Tests bis auf diesen. Ich finde auch nicht die Lösung für das Problem, aber ich kann dir erklären was mir Trichange gemeint ist(oder zumindestens was ich darunter kenne).

In dem Algorithmus werden ja Arrayelement miteinander vertauscht. Also man möchte, ganz pseudo mäßig an der Stelle, ein Array mit einem Array[j] vertauschen. Und das wird so realisiert (Achtung! Kein kompilierbar Code! Nur pseudo Code)

Code: Alles auswählen

//Array[i] soll mit Array[j] getauscht werden
helper = array[j]
array[j] = array[i]
array[i] = helper
Es wird also array[j] in einem Helper gesichert, damit man es dann mit array überschreiben kann. Dann wird array mit dem Helper überschrieben. Dieses Verfahren nennt man Dreieckstauscht oder trichange. Ich hoffe du kannst meine Erklärung nachvollziehen.

Dein PS kann ich sehr gut nachvollziehen... Ich hab dies auch schon anverschiedenen Stellen angemerkt und als feedback gegeben. Ich habe sehr viel Zeit in Codemonkey gesteckt und die meiste davon leider in die Bugs. Aber Kopf hoch, es kann nur besser werden :)

lg kommiker

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 15. Jun 2017 17:25
von Khaleesi
Hallo Mit-Alphatester ähm ich meine Kommilitonen,

ich bin auch auf das Problem gestoßen 9/10 und TriangleChange.. ich habe eine Idee woran es liegen könnte.. wir haben in der Vorlesung und auf Nabla Selectionsort so kennengelernt das wir das Array von Links nach Rechts durchlaufen... möglicherweise ist die Codemonkeys Aufgabe genau andersrum aufgebaut. Ich habe meinen Code also ein wenig abgeändert

Code: Alles auswählen

{
    Listobject<T> tmp;
    int m;
    
    for(int i = array.length-1; i > 0; i--) {
        m = i;
        for(int j = i-1; j >= 0; j--){
            if(array[j].compareTo(array[m]) >= 0){
                m = j;
                continue;
            }
            
        }
        tmp = array[i]; 
        array[i] = array[m];
        array[m] = tmp;
        
    }
    return array;
}

und bekam zumindest die JUnit Meldung
Testheadder – basicTest_for_sorting_like_selectionsort(array.sort.tests_selectionSort_iterative.TestSelectionSort)
Message – The input sequence was: [23, 41, 32, 510, 13, 130 ]Triangle-change was wrong. Test failed at iteration with index: 1 expected:<13> but was:<130>
also bin eine Iteration weiter gekommen.
Davor wollte er als m= 130 in Iteration 0 und in Iteration 1 will er nun den Vorletzten. Vielleicht kommen wir so dem Rätsels Lösung ein bisschen näher:/.

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 15. Jun 2017 18:49
von goerlibe
Sehr interessant...
Ich habe auch noch mal ein wenig probiert und folgendes entdeckt:
Es reicht, bereits, wenn man nur die äußere Schleife umkehrt um bis zur Iteration 1 zu kommen.

Ich werde jedenfalls nicht noch mehr Zeit dahingehend investieren...
Falls ich die Aufgabe im Testat bekomme werde ich aber auf die Barrikaden steigen!

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 15. Jun 2017 21:43
von LukasPhysiker
Hallo goerlibe,

habe ich das richtig verstanden, dass du den Fehler losgeworden bist? Ich kann nicht ganz nachvollziehen, was du gemacht hast, um den Fehler loszuwerden. Mein ursprünglicher Code wäre dieser:

Code: Alles auswählen

{
    int i,j,max;
    Listobject<T> temp;
    for(i=array.length-1;i>0;i--)
    {
        max = 0;
        for(j=1;j<=i;j++)
        {
            if(array[j].compareTo(array[max]) > 0) max = j;
        }
        temp = array[max];
        array[max] = array[i];
        array[i] = temp;
        
    }
    return array;
}
Dann sagst du, es reicht, die äußere Schleife umzukehren? Das kann eigentlich nicht sein, denn dann funktioniert der Algorithmus nicht mehr richtig. Wenn ich das mache, sieht der Code so aus:

Code: Alles auswählen

{
    int i,j,max;
    Listobject<T> temp;
    for(i = 0; i < array.length;i++)
    {
        max = 0;
        for(j=1;j<=i;j++)
        {
            if(array[j].compareTo(array[max]) > 0) max = j;
        }
        temp = array[max];
        array[max] = array[i];
        array[i] = temp;
        
    }
    return array;
}
Dieser besteht nur 6 von 10 Tests. Wenn ich jetzt den Code so anpasse, dass nach dem niedrigsten Element gesucht wird und das immer nach links gepackt wird, sieht das so aus:

Code: Alles auswählen

{
    int i,j,min;
    Listobject<T> temp;
    for(i=0;i<array.length;i++)
    {
        min = i;
        for(j=i;j<=array.length;j++)
        {
            if(array[j].compareTo(array[min]) < 0) min = j;
        }
        temp = array[min];
        array[min] = array[i];
        array[i] = temp;
    }
    return array;
}
Das besteht aber auf einmal gar keinen Test! Ich erhalte:

Code: Alles auswählen

Junitreport

    Time – 180

    Testcount – 10

    Failurecount – 10

    Ignorerecount – 0

Failurereport

    Testheadder – basicTest_complexity(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 4

    Trace

Failurereport

    Testheadder – basicTest_4_elemented_List_random_values(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 4

    Trace

Failurereport

    Testheadder – basicTest_change_with_two_elements_random(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 2

    Trace

Failurereport

    Testheadder – basicTest_for_sorting_like_selectionsort(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 6

    Trace

Failurereport

    Testheadder – basicTest_5_elemented_list_sorted(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 5

    Trace

Failurereport

    Testheadder – basicTest_not_change_with_two_elements(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 2

    Trace

Failurereport

    Testheadder – dynamicTestLong(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 1067

    Trace

Failurereport

    Testheadder – dynamicTest(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 767

    Trace

Failurereport

    Testheadder – boundaryTest_inplace(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 1

    Trace

Failurereport

    Testheadder – basicTest_change_with_two_elements(array.sort.tests_selectionSort_iterative.TestSelectionSort)

    Message – 2

    Trace 
Kann sein, dass ich da einen Fehler eingebaut habe und dass das deswegen nicht funktioniert aber ich finde gerade keinen Fehler. Kannst du mir bitte sagen, wie dein funktionierender Code aussieht?

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 16. Jun 2017 07:34
von goerlibe
Nein, den Fehler habe ich immer noch :|
Nur halt ebenfalls mit Iteration 1 statt iteration 0

Habe gerade kein Zeit (und auch schon lange keine Lust mehr) mich mit der Aufgabe weiter zu befassen und ich denke immer noch, dass hier ein Fehler im Test vorliegt.

Ich erwarte hier dringend Hilfe von den Tutoren, die entweder mal erklären sollen, was hier los ist, oder den Fehler fixen!

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 20. Jun 2017 10:27
von goerlibe
goerlibe hat geschrieben:
16. Jun 2017 07:34
Ich erwarte hier dringend Hilfe von den Tutoren, die entweder mal erklären sollen, was hier los ist, oder den Fehler fixen!

Re: selection sort auf array - "iteration of triangle change"

Verfasst: 23. Jun 2017 12:35
von LukasPhysiker
Jan Ratjens, Julian Prommer, Katrin Becker: Bitte korrigiert das und ignoriert nicht weiter diesen Thread!