# Zufallszahl in 8 Versuchen finden



## Terence86 (10. Dez 2016)

Aufgabenstellung: 
	

	
	
		
		

		
			




Mein Code: 

```
public class Spiel {

    public static int suchen() {
        return hilfsMehtode(1, 100);
    }

    public static int hilfsMehtode(int von, int bis) {
        int half = (von + bis) / 2;
        if (EinsAus100.raten(half) > 0) {
            return hilfsMehtode(half, bis);
        } else if (EinsAus100.raten(half) < 0) {
            return hilfsMehtode(von, half);
        }
        return half;
    }

}
```

Fehlermeldung : 

```
PreTest...

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at TestRunner.main(TestRunner.java:64)
Caused by: java.lang.RuntimeException: Es wurde falsch gesucht und das Ergebnis 54 nicht in < 8 Versuchen gefunden!
    at EinsAus100.raten(EinsAus100.java:23)
    at Spiel.hilfsMehtode(Spiel.java:15)
    at Spiel.hilfsMehtode(Spiel.java:18)
    at Spiel.hilfsMehtode(Spiel.java:18)
    at Spiel.hilfsMehtode(Spiel.java:18)
    at Spiel.hilfsMehtode(Spiel.java:16)
    at Spiel.suchen(Spiel.java:10)
    at PreTest.testeSpiel(PreTest.java:24)
    ... 5 more
testeSpiel:
  Spiel.suchen();
FEHLER: unerwartete Exception wurde geworfen: java.lang.RuntimeException: Es wurde falsch gesucht und das Ergebnis 54 nicht in < 8 Versuchen gefunden!
```

Wenn ich das ganze von Hand mache schaffe ich das aber in unter 8 Versuchen mit 54.
hilfsMehtode: 1 + 100 = 101 / 2 = 50 , 50 ist kleiner 54 -> Wird im Bereich zw. 50 -100 gesucht. 75 > 54 also wird im Bereich 50 - 75 gesucht. 125/2 = 62 > 54, also wird im Bereich 50 - 62 gesucht. -> 56 >54 , also wird im Bereich 50 - 56 gesucht. ->  53 < 54, somit wird im Bereich 53 - 56 gesucht, 54 = 54, wird ausgegeben. 
Hoffe das war verständlich.


----------



## JCODA (10. Dez 2016)

Speichere deinen Aufruf von EinsAus100.raten(half) in einer Variablen sonst rufst du die Methode öfters auf, falls die erste if-Bedingung false ist.
Zudem: bei deinem Beispiel solltest du nicht 50-100 betrachten sondern 51-100.

Grüße


----------



## Terence86 (10. Dez 2016)

Danke dir!
Korrigierter Code :

```
public static int hilfsMehtode(int von, int bis) {
        int half = (von + bis) / 2;
        int gesuchteZahl = EinsAus100.raten(half);
        if (gesuchteZahl > 0) {
            return hilfsMehtode(half + 1, bis);
        } else if (gesuchteZahl < 0) {
            return hilfsMehtode(von, half - 1);
        }
        return half;
    }
```


----------

