probleme mit der return anweisung

Shakra

Aktives Mitglied
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;
Java:
public class Seq_Search {
	 int Suche(int[] array,int schlüssel){
		
		for(int i=0; i<=array.length; i++){			
			if(array[i] == schlüssel){
				break;
				
			}
			
		}
		
	 }
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..
 
anstelle von break; kommt return i;, wenn man raten soll,

falls auf deine Versuche eingegangen werden soll, musst du diese schon posten,

dass nach Schleife mit i nicht mehr viel anzufangen ist kann man aber auch wiederum gleich sagen,
i ist hier eben nur für die Schleife gedacht
 
Ich pflichte SlaterB bei...

Java:
public class Seq_Search {
	 int Suche(int[] array,int schlüssel){
		for(int i=0; i<=array.length; i++){			
			if(array[i] == schlüssel){
				break;
			}
		}
	 }

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;

Java:
public class Seq_Search {
	 int Suche(int[] array,int schlüssel){
		for(int i=0; i<=array.length; i++){			
			if(array[i] == schlüssel){
				return i;
			}
		}
                return -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?
 
Mit return i verlässt du die Methode/Funktion, sobald das Element gefunden wurde. Ergebnis i

Bei return -1 kommst du nur an, wenn das Element während des Schleifendurchlaufes nicht gefunden wurde. Ergebnis -1
 
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:
public class Seq_Search {
	 int Suche(int[] array,int schlüssel){
		
		for(int i=0; i<=array.length; i++){			
			if(array[i] == schlüssel){
				return i;}
		}
		return -1;
	 }
	 
		
		public static void main (String[] args){
			int[] reihe = new int[100];
			for(int i=0; i<100; i++){
				reihe[i] = i*i;
			}
		
		
			Seq_Search key = new Seq_Search();
			System.out.println(key.Suche(reihe,10));
			
			
		}
}
 
Weil es [c]for(int i=0; i<array.length; i++)[/c] heißen muss. Ein Array der Länge n geht von Index 0 bis (n-1). Isso.
 
Hi,
also ich habe schon wieder dasselbe problem..
hier ist der code:
Java:
public class Binary_Search {
	
	 int Suche(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;}
			else if(array[mitte] < key){
				untergrenze = mitte;}
			else{
				obergrenze = mitte;}
	 	}
		return -1;
}

public static void main(String[] args){
	int[] liste = new int[100];
	for(int i=0; i<liste.length; i++){
		liste[i] = i*i;
	}
	Binary_Search finde = new Binary_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:
package de.max96.help;

public class Binary_Search
{
	public static void main(String[] args)
	{
		int[] liste = new int[100];
		for (int i = 0; i < liste.length; i++)
		{
			liste[i] = i * i;
		}
		Binary_Search finde = new Binary_Search();
		System.out.println(finde.Suche(liste, 64));
	}

	int Suche(int[] array, int key)
	{
		for(int i = 0; i < array.length; i++)
		{
			if(array[i] == key)
				return array[i];
		}
		return -1;
	}
}
 
Zuletzt bearbeitet:
@maxemann96: Das soll 'ne Binärsuche werden...

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.
 
Nein, es soll ja eine binäre suche sein..der algorithmus ist schon richtig(müsste richtig sein) aber den -1 bekomme ich einfach nicht hin..
 
Wikipedia hat die Lösung:

Java:
package de.max96.help;

public class Binary_Search
{

	public static void main(String[] args)
	{
		int[] liste = new int[100];
		for (int i = 0; i < liste.length; i++)
		{
			liste[i] = i * i;
		}
		Binary_Search finde = new Binary_Search();
		System.out.println(finde.Suche(liste, 64));
	}

	int Suche(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;
			}
			else if (array[mitte] < key)
			{
				untergrenze = mitte + 1;
			}
			else
			{
				obergrenze = mitte - 1;
			}
		}
		return -1;
	}
}

Binäre Suche ? Wikipedia
 
😳 Okay... stimmt. Der Einseitige Ausschluss greift nur bei rekursiver Binärsuche. Natürlich müssen bei iterativer Suche beide Enden korregiert werden.
 
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".
 

Zurück
Oben