selection sort auf array - "iteration of triangle change"

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

selection sort auf array - "iteration of triangle change"

Beitrag von goerlibe » 1. Jun 2017 17:05

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)

Benutzeravatar
remi jeas
Erstie
Erstie
Beiträge: 11
Registriert: 18. Apr 2017 17:48

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

Beitrag von remi jeas » 2. Jun 2017 13:51

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

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

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

Beitrag von goerlibe » 6. Jun 2017 20:46

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..

kommiker
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:25

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

Beitrag von kommiker » 6. Jun 2017 22:25

Mein Algorithmus benutzt auch die Max-Suche.
Ich finde es auch sehr schade, dass man als Hilfesuchender seitens der Veranstalter so wenig Hilfe bekommt.

Aybekz
Neuling
Neuling
Beiträge: 3
Registriert: 18. Apr 2017 19:29

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

Beitrag von Aybekz » 8. Jun 2017 13:10

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;
}

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

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

Beitrag von LukasPhysiker » 10. Jun 2017 21:51

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.

Julian Prommer
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 167
Registriert: 17. Apr 2013 15:48

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

Beitrag von Julian Prommer » 11. Jun 2017 16:33

jup wird gefixed...
AuD Orga

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

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

Beitrag von goerlibe » 13. Jun 2017 21:51

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)

kommiker
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:25

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

Beitrag von kommiker » 13. Jun 2017 22:37

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

Khaleesi
Neuling
Neuling
Beiträge: 7
Registriert: 15. Jun 2017 17:02

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

Beitrag von Khaleesi » 15. Jun 2017 17:25

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:/.

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

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

Beitrag von goerlibe » 15. Jun 2017 18:49

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!

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

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

Beitrag von LukasPhysiker » 15. Jun 2017 21:43

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?

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

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

Beitrag von goerlibe » 16. Jun 2017 07:34

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!

goerlibe
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 24. Apr 2017 19:22

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

Beitrag von goerlibe » 20. Jun 2017 10:27

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!

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

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

Beitrag von LukasPhysiker » 23. Jun 2017 12:35

Jan Ratjens, Julian Prommer, Katrin Becker: Bitte korrigiert das und ignoriert nicht weiter diesen Thread!

Antworten

Zurück zu „Archiv“