Habe ein Problem mit meinem Programm. Ich war gestern krank als wir dieses Programm in der Schule gemacht haben. Jetzt habe ich das Binäre Suchen versucht zu Programmieren. Mein Programm funktioniert aber nur teilweise. Wenn ich eine Zahl suche die sich mehr in der Mitte des Arrays befindet funktioniert es auch wenn ich aber eine Zahl am Anfang oder am Ende des Arrays nehme kommt immer ein
OutofBoundsException. Könnte sich jemand mein Programm ansehen ich komme einfach nicht weiter.
Danke für eure Hilfe.
Hier der Quellcode:
OutofBoundsException. Könnte sich jemand mein Programm ansehen ich komme einfach nicht weiter.
Danke für eure Hilfe.
Hier der Quellcode:
Java:
public class Binäres_Suchen
{
public static void main (String[]args)
{
Out.println ("Binärer Zahlen Sucher.");
int []a = new int [12];
int max = 30;
for (int i = 0; i < a.length; i++)
{
max = (int) (Math.random ()*30+1);
a[i] = max;
}
Out.println ();
int s1 = 0;
int s2 = 0;
while(s1 < a.length)//In dieser Schleife werden die Zahlen im Array auf Gleichheit überprüft.
{
for (s2 = 0; s2 < a.length; s2++)
{
if (s1 != s2)
{
if(a[s2] == a[s1])
{
max = (int) (Math.random ()*30+1);
a[s2] = max;
}
}
else
{
//tu nichts
}
}
s2 = 0;
s1++;
}
s1 = 0;
s2 = 1;
int s3;
int t1 = 0;
int t2 = 0;
while(s1 < a.length)//Hier werden sie nach der Größe geordnet.
{
for (s3 = s2; s3 < a.length; s3++)
{
if (a[s3] < a[s1])
{
t1 = a[s1];
t2 = a[s3];
a[s1] = t2;
a[s3] = t1;
}
}
s3 = 0;
s2++;
s1++;
}
for (int i = 0; i < a.length; i++)
{
Out.print (a[i]+" ");
}
find (a);
}
public static void find (int []a)
{
int zSearch = 0;
do
{
Out.print ("Nach welcher Zahl möchten Sie in der Zahlenreihe suchen?: ");
zSearch = In.readInt ();
if (zSearch < 1 || zSearch > 30)
{
zSearch = 0;
Out.println ("!!!Geben Sie nur Zahlen zwische 1 und 30 ein!!!");
}
}while(zSearch < 1 || zSearch > 30);
int high = a.length-1;
int m = 0;
int low = 0;
int u = 0;
while (low <= high)
{
m = (low+high) /2;
if (a[m] == zSearch)
{
Out.print ("Ihre Zahl wurde gefunden.");
u = 1;
break;
}
if (zSearch < a[m])
{
high = high+(m-1);
}
if (zSearch > a[m])
{
low = low+(m+1);
}
}
if (u == 0)
{
Out.print ("Ihre Zahl wurde nicht gefunden.");
}
}
}