searchSecondLargestElement(): falsche zweit größte Elemente

hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von hallo6 » 4. Mai 2017 10:57

Hallo,

Ich bin gerade dabei, die Aufgabe searchSecondLargestElement() in Kategorie Array zu machen. Bei mir schlagen noch drei Test fehl. Bei einem von den durchsuchenden Arrays kann man die Integer-Werte sehen, wobei laut Test das drittgrößte Element das zweitgrößte ist.

Meine Implementation lautet:

Code: Alles auswählen

{
    setSecLargest(-1);
    setLargest(-1);
    for (int i = 0; i < getLength(); i++) {
        if (getElem(i) == null) {
            //do nothing
        } 
        // noch kein Largest Element
        else if (getLargest() == -1) {
            setLargest(i);
        }
        // neues Largest Element
        else if (getComp().compare(getElem(i), getElem(getLargest())) > 0) {
            setSecLargest(getLargest());
            setLargest(i);
        } 
        // neues SecLargest Element; noch kein Largest Element
        else if ((getSecLargest() == -1 && getComp().compare(getElem(i), getElem(getLargest())) < 0) ||
        (getSecLargest() != -1 && getComp().compare(getElem(i), getElem(getSecLargest())) > 0)) {
            setSecLargest(i);
        }
    }
}


Sind die Test falsch oder habe ich bei meiner Implementation einen Denkfehler?

Danke für Antworten im Vorraus.

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von Julian Prommer » 4. Mai 2017 19:32

Welcher Test schlägt genau fehl`?
AuD Orga

marvin
Neuling
Neuling
Beiträge: 7
Registriert: 19. Apr 2017 14:18

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von marvin » 4. Mai 2017 20:55

Hallo,
bei mir schlagen folgende Tests fehl:
Failurereport

Testheadder – staticTestResultFound_String(array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests)

Message – The testarray consists of Strings. The equals method of class String uses method hashCode() for comparison. So 2-tupels are shown: first the String and second result of hashCode() of the String of each array element: (Hallo, A, Uni, Sonne, Donaudampfschifffahrtsgesellschaftskapitaen) expected:<0> but was:<3>

Trace – java.lang.AssertionError: The testarray consists of Strings. The equals method of class String uses method hashCode() for comparison. So 2-tupels are shown: first the String and second result of hashCode() of the String of each array element: (Hallo, A, Uni, Sonne, Donaudampfschifffahrtsgesellschaftskapitaen) expected:<0> but was:<3> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests.staticTestResultFound_String(SearchSecondlargestElementTests.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:745)

Failurereport

Testheadder – notmoreThenN(array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests)

Message – WrongPosition expected:<0> but was:<17>

Trace – java.lang.AssertionError: WrongPosition expected:<0> but was:<17> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests.notmoreThenN(SearchSecondlargestElementTests.java:516) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:745)

Failurereport

Testheadder – dynamicTest_result(array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests)

Message – Initiallist was (-71,-53,215,153,-9,61,219,-46,177,177,173,162,195,-56,-16,175,-59,20,243,-12,24,247,152,-40,203,182,192,123,45,-55,-63,287,-98,162,25,-47,238,135,60,275,55,30,298,-9,-26,36,12,-38,19,-23,-84,-54,-93,-84,-92,37,243,47,287,288,5,-42,108,17,151,18,258,218,238,-28,157,51,226,80,197,162,35,-80,-33,73,217,-31,205,252,89,143,1,141,-77,280,-32,214,216,223,257,-78,105,271). Expected: 31. Your method returned: 59

Trace – java.lang.AssertionError: Initiallist was (-71,-53,215,153,-9,61,219,-46,177,177,173,162,195,-56,-16,175,-59,20,243,-12,24,247,152,-40,203,182,192,123,45,-55,-63,287,-98,162,25,-47,238,135,60,275,55,30,298,-9,-26,36,12,-38,19,-23,-84,-54,-93,-84,-92,37,243,47,287,288,5,-42,108,17,151,18,258,218,238,-28,157,51,226,80,197,162,35,-80,-33,73,217,-31,205,252,89,143,1,141,-77,280,-32,214,216,223,257,-78,105,271). Expected: 31. Your method returned: 59 at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.assertTrue(Assert.java:41) at array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests.dynamicTest_result(SearchSecondlargestElementTests.java:400) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:745)
Beim 3.Test soll laut Test 287 das zweitgrößte Element sein. 288 und 298 sind aber größer.

hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von hallo6 » 4. Mai 2017 21:53

ja genau, bei mir schlagen die gleichen Tests fehl.

hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von hallo6 » 6. Mai 2017 12:48

Ich habe das Gefühl, dass die Tests nicht richtig funktionieren... :(

UnkownIdentity
Erstie
Erstie
Beiträge: 11
Registriert: 7. Mai 2017 14:58

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von UnkownIdentity » 7. Mai 2017 15:07

Für mich schlagen auch genau diese 3 Tests fehl, obwohl ich mir relativ sicher bin dass die Implementierung korrekt ist. Dass beim dritten Test ein falscher Wert assertet wird habt ihr ja bereits gesagt: 298 ist der größte, 288 der zweitgrößte (Index 59), erwartet wird aber 287 (Index 31).

Wäre schön wenn wir noch ein Feedback bekommen ob das bis zum ersten Testat gefixed wird, oder ob der Fehler hier doch aus irgendeinem Grund bei uns liegt.

LG

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von Julian Prommer » 7. Mai 2017 17:00

wird untersucht.
AuD Orga

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von Julian Prommer » 7. Mai 2017 18:47

bug fixed...
AuD Orga

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von kommiker » 14. Mai 2017 17:19

Failurereport
Testheadder – dynamicTest_steps(array.search.tests_searchSecondLargestElement.SearchSecondlargestElementTests)
Message – Too much steps: for an array with: 448 elements your implementation needed 1339 steps.
Trace
Das sagt er bei meiner Lösung, obwohl ich genau einmal mit einer For-Schleife übers Array laufe. (Sollte also Laufzeit n haben.)

Auch die oben gepostete Lösung schmeißt denselben Fehler bei mir.
Habe ich einen Denkfehler oder ist der Test an der Stelle falsch?

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von kommiker » 14. Mai 2017 17:25

Das die obige Lösung denselben Fehler schmeißt könnte auch daran liegen das Codemonkey da schon nicht mehr richtig reagiert hat. Ist ja gerade down gegangen der Server.

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

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von Julian Prommer » 14. Mai 2017 21:18

Immer diese Servertests ;)

Immerhin ne Gelegenheit fürn Update...
AuD Orga

Gruftgrabbler
Neuling
Neuling
Beiträge: 5
Registriert: 16. Mai 2017 10:44

Re: searchSecondLargestElement(): falsche zweit größte Elemente

Beitrag von Gruftgrabbler » 18. Sep 2017 16:20

Ich habe einen Algorithmus programmiert, der glaube ich genau so funktioniert wie der Algorithmus der oben gepostet wurde.
Dabei erhalte ich jetzt den Fehler bei dem Test, wo 3 gleiche Strings übergeben werden.
Ich mein ist klar, dass davon keiner "der größte" ist, aber hat jemand ne Idee wie ich das lösen könnte 0.o
Danke

Code: Alles auswählen

{
    setSecLargest(-1);
    setLargest(-1);
    // Go through the array and search for the largest element. If a new largest element is found replace it and put the old largest element to secLargest
    for(int i=0; i<getLength(); i++){
        // If Current > Largest
        if(getElem(i) == null)
            continue;
        // The First Element not null is always a largest element
        if(getLargest() == -1){
            setLargest(i);
            continue;
        }
        // If the current Element is bigger than the current Largest Element
        if(getComp().compare(getElem(i), getElem(getLargest())) > 0){
            setSecLargest(getLargest());
            setLargest(i);
            continue;
        }
        if(getSecLargest() == -1){
            setSecLargest(i);
            continue;
        }
        // If the current Element is bigger than the second largest but nor bigger as the largest
        if(getComp().compare(getElem(i), getElem(getSecLargest())) > 0){
            setSecLargest(i);
            continue;
        }
    }
}

Antworten

Zurück zu „Archiv“