Lineare Suche

BlackSalad

Bekanntes Mitglied
Hallo,

ich verstehe nicht wieso das hier nicht geht:


Java:
public class LineareSuche {
	public static void main(String[] args){
	   int[] reihe ={1,4,6,7,8,9,10};
	   int c=Integer.parseInt(args[0]);
	   int i=0;
	   System.out.println(suche(reihe,c,i));
		}

	static boolean suche(int[] reihe, int c, int i){
		
		while(reihe.length<i){
		
			if(reihe[i]==c){
				return true;
			}
			else{
				return false;
			}
		}
		
	}
}

Wenn ich das return außerhalb des while-Blocks mache, dann kompiliert es zwar, aber dann macht es ja logischerweise gar nicht mehr das was es soll. Aber wieso geht diese Version nicht?

Ich wär euch sehr danbar, wenn ihr mir das kurz eklären könnte 😉
 
und gleich noch ne Frage..

diesmal Binäre Suche (ich übe grad bisschen..)

Java:
public class BinäreSuche {
	public static void main(String[] args){
		int c= Integer.parseInt(args[0]);
		int[] reihe={2,4,5,6,7,9};
		int obergrenze=reihe.length;
		int untergrenze=reihe[0];
		int i=0;
		System.out.println(suche(boolean));
	}
	static boolean suche(int untergrenze, int c, int obergrenze, int[] reihe, int i){
		if(reihe[i]==c){
			return true;
		}
		else{
			if(reihe[i]>c){
				return suche(reihe[i+1],c , obergrenze, reihe, i);
			}
			else{
				return suche(untergrenze,c,reihe[i-1],reihe, i);
			}
		}
	}
}


wie schaff ich es hier, dass true bzw. false ausgegeben werden? Die ausgabe will ich in der mainmethode haben, weiß aber nicht wie ichs hinbekomme.

Danke 🙂
 
Zu der 1. Frage: in der Schleife gibst du direkt entweder false oder true zurück... wie oft kann die Schleife also laufen?
Zu der 2. Frage, die eigentlich nicht in diesen Thread gehört: was soll denn
Code:
suche(boolean)
sein? Bzw was hast du dir dabei gedacht, als du es geschrieben hast?
 
1. So...

Java:
public class LineareSuche 
{
    public static void main(String[] args)
    {
        int[] reihe ={1,4,6,7,8,9,10};
        int c=Integer.parseInt(args[0]);
        System.out.println(suche(reihe,c));
     }
 
    static boolean suche(int[] reihe, int c)
    {
        int i=0;    
        while(reihe.length<i)
        {
            if(reihe[i++]==c)
                return true;
         }
         return false;
    }
}

2. Und so.....

Java:
public class BinäreSuche 
{
   public static void main(String[] args)
   {
      int c = Integer.parseInt(args[0]);
      int[] reihe = {2, 4, 5, 6, 7, 9};
      int obergrenze = reihe.length-1;
      int untergrenze = 0;
      System.out.println(suche(untergrenze, c, obergrenze, reihe));
   }

   static boolean suche(int untergrenze, int c, int obergrenze, int[] reihe)
   {
      int i = (untergrenze + obergrenze + 2)/2;
      if (reihe[i] == c ||
          reihe[untergrenze] == c ||
          reihe[obergrenze] == c)
      {
         return true;
      }
      else if (untergrenze >= obergrenze)
      {
         return false;
      }
      else
      {
         if (reihe[i] < c)
         {
            return suche(i, c, obergrenze-1, reihe);
         }
         else
         {
            return suche(untergrenze+1, c, i, reihe);
         }
      }
   }
}

Für weitere Fragen stehe ich gerne zum Verfügung
 

Zurück
Oben