Hi, ich wollte mal einen Quickselect implementieren und bin dabei auf ein komisches Problem gestoßen. Und zwar wird ein return nicht erkannt, falls das Programm in den IF-Zweig geht.
hier der Code
Und zwar bekomm ich die Nachricht: "testnachricht" ausgegeben, aber trotzdem gibt er mir den Wert bei der letzten returnanweisung aus, also 145234 und nicht 132541435...
Wieso wird das return überspringen. Meinem Verständnis nach, sollte es gar nicht möglich sein, für das Programm zu dem letzten return zu kommen, da irgendwo vorher eine If-Abfrage zu einem anderen return führt.
Oder bin ich zu blind und sehe den offensichtlichen Fehler nicht? Aber wie gesagt wundert es mich, dass er die else anweisung aus dem block
ausgibt, aber dann das return überspringt.
hier der Code
Java:
public class Quickselect {
public int Quickselect(int[] list, int k){
int laenge = list.length;
return sort(list, k, laenge);
}
public int sort(int[] list, int k, int laenge){
int[] lower = new int[100];
int[] higher = new int[100];
int i_lower = 0;
int i_higher = 0;
int pivo = 0;
//spzialfälle
if (laenge == 1){
return list[0];
}
if (laenge == 2){
if (k == 1){
return (Math.min(list[0], list[1]));
}
else{
System.out.println("Testnachricht");
return 132541435;
}
}
pivo = list[0];
for (int i = 1; i <laenge;i++ ){
if (list[i] <= pivo){
lower[i_lower] = list[i];
i_lower++;
}
else{
higher[i_higher] = list[i];
i_higher++;
}
}
if (k <= i_lower){
sort(lower, k, i_lower);
}
else if (k > i_lower+1){
sort(higher, (k-i_lower-1), i_higher);
}
else
return pivo;
return 145234;
}
}
Und zwar bekomm ich die Nachricht: "testnachricht" ausgegeben, aber trotzdem gibt er mir den Wert bei der letzten returnanweisung aus, also 145234 und nicht 132541435...
Wieso wird das return überspringen. Meinem Verständnis nach, sollte es gar nicht möglich sein, für das Programm zu dem letzten return zu kommen, da irgendwo vorher eine If-Abfrage zu einem anderen return führt.
Oder bin ich zu blind und sehe den offensichtlichen Fehler nicht? Aber wie gesagt wundert es mich, dass er die else anweisung aus dem block
Java:
if (laenge == 2){
if (k == 1){
return (Math.min(list[0], list[1]));
}
else{
System.out.println("Testnachricht");
return 132541435;
}
}
Zuletzt bearbeitet: