Hallo Leute!
Ich muss eine Binärsuche machen und habs endlich geschafft (rekursiv - muss aber ned sein)
Das einzige Problem ist, wenn ich eine nicht vorhande Zahl eingebe bekomme ich ne mörder lange Fehlermsg und einen StackOverflowError.
Ich weiss warum der kommt, da ja nicht überprüft wird ob die Zahl da ist. Aber irgendwie muss das ja gehen oder?
Anbei der Code:
und
Ich muss eine Binärsuche machen und habs endlich geschafft (rekursiv - muss aber ned sein)
Das einzige Problem ist, wenn ich eine nicht vorhande Zahl eingebe bekomme ich ne mörder lange Fehlermsg und einen StackOverflowError.
Ich weiss warum der kommt, da ja nicht überprüft wird ob die Zahl da ist. Aber irgendwie muss das ja gehen oder?
Anbei der Code:
Code:
public class test
{
/**
* @param args
*/
public static void main(String[] args)
{
int[] zahl =
{ 1, 3, 5, 7, 9, 10, 13 , 51, 103,1111,4444,33333};
int gesucht = 113;
binaersuche.suche(zahl, gesucht, 0, (zahl.length / 2), zahl.length);
}
}
und
Code:
public class binaersuche
{
static int durchlaufanzahl = 0;
public final static void suche(int[] zahl, int gesucht, int anfang,
int mitte, int ende)
{
if (gesucht <= zahl[zahl.length - 1])
{
if (gesucht == zahl[mitte] && anfang <= zahl.length)
{
System.out.println("Zahl " + zahl[mitte] + " Gefunden");
System.out.println("Es hat " + (durchlaufanzahl + 1)
+ " Durchläufe gebraucht");
System.exit(0);
}
if (gesucht < zahl[mitte] && anfang <= zahl.length)
{
ende = mitte;
mitte = ende / 2;
suche(zahl, gesucht, anfang, mitte, ende);
}
if (gesucht > zahl[mitte] && anfang <= zahl.length)
{
int mitte2 = (((ende - mitte) / 2) + mitte);
suche(zahl, gesucht, anfang, mitte2, ende);
}
}
else
{
System.out.println("Es keine dementsprechende Zahl gefunden");
}
}
}