Kaum das erste Problem gelöst, da ist das nächste da:
Wir haben eine Klasse, die beim erzeugen, eine Konsole ausgibt, mit einer bestimmten Anzahl, die man vorher eingegebenhat, an zufälligen Zahlen. Diese sind auch in der richtigen Reihenfolge geordnet.
Also kleinste Zahl -> größte Zahl
Soooo: Nun haben wir uns über den Aufwand unterhalten.
Wir sollten jetzt eine Methode machen, mit den Variablen von, bis und index, wobei der Aufwand möglichst klein sein soll. Dabei soll geprüft werden, ob eine eingegeben Zahl unter den zufällig erzeugten Zahlen vorhanden ist.
Wenn ich jeden Arrayeintrag prüfe wäre der Aufwand durchschnittlich ja n/2
Im besten Falle 1 und im schlechtesten Falle n.
Jetzt hab ich mir überlegt, ich hab die Variable von beim ersten Arrayeintrag, die Variable bis beim letzten. Jetzt prüfe ich mit der Indexvariable genau die hälfte.
Ist die Zahl größer als die gesuchte Zahl, setze ich das von an die Stelle von dem Index und das Index wieder bei der Hälfte zwischen von und bis.
Das dann immer so weiter etc. Ist die Zahl halt kleiner setze ich das bis an die Stelle vom Index etc.
Das ist jetzt ziemlich kompliziert. Der Aufwand ist dann nach meiner Überlegung der Logarithmus von n zur Basis 2. Ich denke das ist der geringste Aufwand. Zumindest wollte ich das so umsetzen.
Jetzt hab ich folgenden Quellcode geschrieben:
PHP Code:
public void zahlVorhanden(int zahlg){
int von = 0;
int bis = zahlenArray.length -1;
int index = (von+bis)/2;
while(zahlg != zahlenArray[index])
{
if(zahlenArray[index]< zahlg)
{
von = index;
index = (von+bis)/2;
}else{
bis = index;
index = (von+bis)/2;
}
if(zahlenArray[index] == zahlg)
{
System.out.println("Die Zahl ist vorhanden");
}
if(bis <= von){
System.out.println("Die Zahl ist nicht vorhanden");
break;
}
}
}
Ich lass mir also erst die Anzahl von Zahlen ausgeben. Will ich dann prüfen, ob eine Zahl vorhanden ist, von der ich weiß, dass sie es ist, klappt das auch.
Ist die Zahl allerdings nicht vorhanden, krieg ich eine Endlosschleife.
Ich kann mir denken, dass da irgendwo ein Fehler drin ist. ich vermute fast in der letzten If-Schleife aber beheben kann ich ihn nicht, trotz langem Rumprobieren.
Ich find das für mich selbst schon schwer im Kopf nachzuvollziehen, wie sich die Variablen verschieben und komm auch immer wieder durcheinander.
Ich hoffe hier hat einer das Problem verstanden.
Eine Lösung wäre, wenn ich das richtig vermute, den Logarithmus von der Länge des Arrays zu nehmen. Wird dann die Schleife öfter ausgeführt, als der Logarithmus groß ist, ist die Zahl nicht vorhanden.
Ob das so stimmt ist allerdings auch die Frage und ich denke, dass ist einfacher lösbar.
Vielen Dank für jede Hilfe.
Belur