Guten Tag zusammen,
wie der Titel schon sagt, habe ich mit dem rückgabetyp return wiedermal stress..
Der return wird nirgends akzeptiert, hier ist der code dazu;
So, wo kommt die return anweisung jetzt hin? Ich habe iwie alle möglichkeiten versucht(denke ich mal) aber jedes mal kommt eine fehlermeldung..Entweder wird der variable i nicht erkannt oder die return anweisung ignoriert..und mit break klappt es iwie gar nicht mehr..bin ziemlich durcheiander..
Ich hoffe jemand kann helfen..
Wenn das eine Art IndexOf-Suche sein soll, dann sollte auch noch ein Rückgabewert definiert sein, der zurückkommt, wenn das gesuchte Element nicht vorhanden ist. Meist -1;
Diese return -1 hat mir gefehlt, jetzt funktioniert es auch..aber ich verstehe iwie nicht ganz..
Warum einfach return -1?
Müsste man das nicht mit else schreiben?
Es ist also eine art else anweisung, so wie ich es verstehe..
Aber wenn ich ein nicht existierennedes elemet eingebe bekomme ich anstatt der -1 eine fehlermeldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Seq_Search.Suche(Seq_Search.java:6)
at Seq_Search.main(Seq_Search.java:21)
Hier ist noch mal der gesamt code:
Java:
publicclassSeq_Search{intSuche(int[] array,int schlüssel){for(int i=0; i<=array.length; i++){if(array[i]== schlüssel){return i;}}return-1;}publicstaticvoid main (String[] args){int[] reihe =newint[100];for(int i=0; i<100; i++){
reihe[i]= i*i;}Seq_Search key =newSeq_Search();System.out.println(key.Suche(reihe,10));}}
Hi,
also ich habe schon wieder dasselbe problem..
hier ist der code:
Java:
publicclassBinary_Search{intSuche(int[] array,int key){int untergrenze =0;int obergrenze = array.length-1;while(untergrenze<=obergrenze){int mitte =(obergrenze+untergrenze)/2;if(array[mitte]== key){return mitte;}elseif(array[mitte]< key){
untergrenze = mitte;}else{
obergrenze = mitte;}}return-1;}publicstaticvoidmain(String[] args){int[] liste =newint[100];for(int i=0; i<liste.length; i++){
liste[i]= i*i;}Binary_Search finde =newBinary_Search();System.out.println(finde.Suche(liste,69));}}
Also für 69 sollte eig. -1 rauskommen aber auf der console erscheint gar nichts und es terminiert auch nicht..und wenn ich nach der else anweisung return -1 eingebe, bekomme ich immer -1 als ergebnis raus.
Er hängt sich bei der Suche in einer Endlosschleife auf und die Hat immer folgende Werte:
Untergrenze: 8 Obergrenze: 9
und wieso machste es dir nicht einfacher?
Code:
Java:
packagede.max96.help;publicclassBinary_Search{publicstaticvoidmain(String[] args){int[] liste =newint[100];for(int i =0; i < liste.length; i++){
liste[i]= i * i;}Binary_Search finde =newBinary_Search();System.out.println(finde.Suche(liste,64));}intSuche(int[] array,int key){for(int i =0; i < array.length; i++){if(array[i]== key)return array[i];}return-1;}}
Bei dem Anderen hat er aber recht. Du kommst immer eine ElementRange der Länge 1. Dagegen hilft z.B. der Ausschluss eines bereits getesteten Indexes evtl. mit "untergrenze = mitte + 1" in Zeile 11.
Irrtum... keine andere Variante, sondern die einzig richtige. Man muss halt den Suchbereich ständig verkleinern. Bei rekursiver Suche genügt es deswegen, wenn man den Index einseitig korregiert (weil Obergrenze dort eh' schon "Länge - 1" ist), während es bei iterativer Suche unbedingt beide Seiten sein müssen, sonst käme man bei ungeraden Arraylängen nie auf "(og+ug)/2 == 0".