binsuchrek

M

Maximaltime

Gast
danke für die Hilfe bei fakultätrek habs soweit hinbekommen

nun bekomm ich bei binsuchrek in zeile 15 wieder missing return statement weiß aber nicht was ich verändern soll.

Java:
public class binsuchrek{


	public static int binsuchrekursiv(int [] o,int p,int l,int r){

	int links=0;
	int rechts=o.length;
	int mitte=0;

	if(links<=rechts){
		mitte=(links+rechts)/2;
		if(p<o[mitte])return binsuchrekursiv(o,p,l,mitte);
		else if(p>o[mitte])return binsuchrekursiv(o,p,mitte,r);
		else return mitte;}
	}







	public static void main(String[]args){

	int []	f={1,4,6,9,10,12,54,56,75,675,4311};
	int 	k= 56;
	int links= 0;
	int rechts= f.length;
	int stelle=binsuchrekursiv(f,k,links,rechts);
	System.out.println(k+"=k steht an der "+stelle+"-ten Stelle");

	}
}
 

Maximaltime

Mitglied
hab das nun behoben compiler meckert nichtmehr aber wenn ich das programm starte öffnet sich ne endlosschleife von befehlen: at binsuchrek.binsuchrekursiv<binsuchrek.java:13>
 
S

SlaterB

Gast
weil du dein Programm so programmiert hast dass die Methode immer wieder aufgerufen wird,
gib dir zu Beginn der Methode jeweils die Parameter mit System.out.println() aus, dann siehst du was immer gleich bleibt

evtl. siehst du gar nichts unter Unmengen an Ausgaben und dann noch langer Fehlermeldung,
dann merke dir als weiteres Werkzeug:
[c]try{ Thread.sleep(1000); } catch(Exception e) {}[/c]
wartet 1 sec, verringert also die Ausgaben direkt hintereinander, und bis zur Exception wirds ne Stunde dauern

edit:
wahrscheinlich muss rechts doch größer als links sein oder so
 
Zuletzt bearbeitet von einem Moderator:

Maximaltime

Mitglied
habs hinbekommen nun:)


Java:
public class binsuchrek{


	 public static int binsuchrekursiv(int [] o,int p,int l,int r){


try{ Thread.sleep(1000); } catch(Exception e) {}

System.out.println(p+" =p "+l+" =l "+r+" r ");

	if(l<=r){
		int mitte=(l+r)/2;
		if(p<o[mitte])return binsuchrekursiv(o,p,l,mitte);
		else if(p>o[mitte])return binsuchrekursiv(o,p,mitte,r);
		else return mitte;}
		else return -1;
	}







	public static void main(String[]args){

	int []	f={1,4,6,9,10,12,54,56,75,675,4311};
	int 	k= 56;
	int links= 0;
	int rechts= f.length;
	int stelle=binsuchrekursiv(f,k,links,rechts);
	System.out.println(k+"=k steht an der "+stelle+"-ten Stelle");

	}
}
 
S

SlaterB

Gast
wie kommst du denn zu dieser Vermutung?

hier eine einfachere Liste zum Testen: int[] f = {1};
immer noch Exception

geh doch Schritt für Schritt durch (und danach mit langsam längeren Listen), zu jeder neuen Methodenausführung:
- feststellen was die Parameter sind, evtl. ausgeben,
- entscheiden ob ein rekursiver Aufruf nötig ist, welche Bedingung gilt dafür?,
sage nicht 'links <= rechts', sondern sinnvolle Sätze in deutsch,
wenn du das Verfahren nicht kannst, dann kannst du es auch kaum programmieren, oder?
Bedingung prüfen, evtl. ausgaben
- falls keine Rekursion oder ansonsten vielleicht auch zusätzlich weitere Bearbeitungsschritte ausführen usw.

wie würdest du es auf dem Papier machen?

edit: wenn fertig, umso besser, obwohl der Code für mich nicht richtig aussieht,
siehe Beispiel mit Liste {1}
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Oben