Binäres Suchen mit Rekursion

chillerStudent

Bekanntes Mitglied
Hallo,

ich muss eine Methode schreiben, die einen Buchstaben in einem sortierten Alphabet sucht.

Das sortierte Alphabet und der gesuchte Buchstabe wird über Kommandozeilenparameter eingegeben.

z.b. "abcdfgh" "g"

der gesuchte Buchstabe ist g.

Das hab ich bin jetzt geschrieben:

Java:
public static void main(String[] args) {
		
		String st = "";
		for(int i=0; i<args.length; i++) {
		    st += args[i];
		}
		char[] a = st.toCharArray();
		
		System.out.println(binS(a, a[a.length-1], a[0], a[a.length-2]));
	}
	
	
	public static String binS(char[] a, char c, char low, char high) {
		
		char half = (char) ((low + high) / 2);
		if(low <= high) {
			if(half == c) {
				return c+" ist enthalten";
			} else {
				if(half <= c) {
					return binS(a, c, (char)(half+1), high);
				} else {
					if(half > c) {
						return binS(a, c, half, (char) (high-1));
					}
				}
			}	
		} 
		return c+" ist nicht enthalten";
	}

Er zeigt mir den Fehler beim Aufruf der Methode.

Was mache ich hier falsch?
 
Mit 'middle' mein ich natürlich 'high', sorry.

Klar ist das Ergebnis falsch, daher auch meine rhetorische Frage warum du die 3 Variablen als char deklariert hast. In deiner such Methode greifst du auch nirgendwo auf das Array a zu - das kann ja schonmal nicht richtig sein.
 
> Er zeigt mir den Fehler beim Aufruf der Methode.
welcher Fehler?
bei mir läuft alles, ich verzichte allerdings auch auf args-Argumente
Java:
    public static void main(String[] args)
    {

        String st = "abcdfghg";
//        for (int i = 0; i < args.length; i++)
//        {
//            st += args[i];
//        }
es ist ja nicht nachvollziehbar was bei dir an Parameter übergeben werde,
gib doch als erstes den zusammengebauten String st aus, um das zu überprüfen,

ansonsten kannst du mit im Code vorgegebenen String testen, Programmeingaben sind immer verdächtig fehleranfällig übers Forum,

dass a nirgendwo verwendet wird ist natürlich schon ein Blocker, mehr ist gar nicht zu sagen
 

Zurück
Oben