Hat jemand vielleicht eine Idee was hier schief läuft?
Ich würde, bei der for-Schleife den Setter von setSecElem() anders schreiben, das der den richtig setzt, denn bis jetzt setzt er immer den alten secElement von den 1. und 2. if-statement. Ich habe aber keine Idee, wie ich das anders schreibe, sodass er es aktualisiert. (Da ja getSecElem()
von diesen Abschnitt hier abhängt:
Code: Alles auswählen
if(getComp().compare(first, second) > 0){
max = first;
setLargest(0);
secMax = second;
setSecLargest(1);
}
if(getComp().compare(first, second) < 0){
max = second;
setLargest(1);
secMax = first;
setSecLargest(0);
}
Kompletter Code:
Code: Alles auswählen
{
T max= null;
T secMax=null;
if(getListLength() < 2) {return -1;}
T first = getListElem(0);
T second = getListElem(1);
if(getComp().compare(first, second) > 0){
max = first;
setLargest(0);
secMax = second;
setSecLargest(1);
}
if(getComp().compare(first, second) < 0){
max = second;
setLargest(1);
secMax = first;
setSecLargest(0);
}
int counter=0;
for(int i=2; i<getListLength(); i++){
T elem = getListElem(i);
if(elem == null){
continue;}
if(getComp().compare(elem, max) > 0){
secMax = max;
setSecLargest(secMax);
max =elem;
setLargest(getLargest());
}
else { if(getComp().compare(elem, secMax) > 0){
secMax = elem;
setSecLargest(getSecLargest());
}
else if(getComp().compare(elem, max) == 0){
if(counter == 1){
continue;}
secMax = max;
setSecLargest(getSecLargest());
max = elem;
setLargest(getLargest());
counter++;
}
}
}
return getSecLargest();
}
