schau dir doch deinen Programmverlauf an, gib alle Werte aus,
oder auch direkt am Code halbwegs ablesbar,
eingabe wird überhaupt nicht verwendet, außer zum Schleifenabbruch ohne direkte Meldung,
nur durch Programmende bekommt man mit dass man den gesuchten Wert gefunden hat,
die Meldungen und überhaupt die Berechnung von Mitte jede Runde sind von der Eingabe unabhängig, laufen ganz alleine,
jede Runde Intervall halbiert bis ‘gefunden’, auch wenn man die ganze Zeit 0 eintippt
ich will vorerst nicht viel mehr erzählen außer Anregungen:
überlege dir, wie das Programm überhaupt funktionieren soll,
was soll in Situation X mit Werten … bei Eingabe Y konkret passieren?
was bei einer anderen Eingabe, überlege alle Möglichkeiten, außerhalb des Bereichs, ober/ unterhalb der ‘Mitte’ usw.
und dann programmieren, bisher wie gesagt wird eingabe gar nicht für Vergleiche mit etwa mitte verwendet,
das hängt in deinem if … else if…
wenn du das klar machst, was wohin gehört, dann sollte das auch klappen
unteregrenze = mitte;
System.out.println("bitte geben Sie die zahl mehr als "+mitte);
}else {
if(zufall < mitte){
System.out.println("bitte geben Sie die zahl weniger als "+mitte);
oberegrenze = mitte;
}else{
System.out.println("Sie haben die zahl beim " + zaehler+ " Versuch erraten");
}}
So richtig sinnvoll erscheint das Ganze nicht.
Der geratene Wert spielt für die Hinweise, die das Programm gibt, aktuell keine Rolle.
Wäre es nicht vielleicht sinnvoller, wenn das Programm nur beurteilen würde, ob der eingegebene Wert zu groß, oder zu klein ist ?
Edit:
Ich hab das nochmal genauer angeschaut…
das Programm behauptet, die Zahl sei gefunden worden, obwohl nur die “Mitte” der Zahl entspricht.
Überlege dir die Logik nochmal…
hi, glaub das müsste dir helfen, halt warum es Int so macht, kann ich dir leider net sagen…
if (eingabe == zufall){
System.out.println("größer: " + (zufall > mitte)); //false
System.out.println("kleiner: " + (zufall < mitte)); //true
System.out.println("Sie haben die zahl beim " + zaeler+ " Versuch erraten");
}
else if(zufall > mitte){
unteregrenze = mitte;
System.out.println("bitte geben Sie die zahl mehr als "+mitte);
}else {
System.out.println("bitte geben Sie die zahl weniger als "+mitte);
oberegrenze = mitte;
}
ich habe alles mit der hand aufgeschrieben und soll nichts falsches an diese Logik sein.
extra habe ich code verändert damit der hier übersichtlicher ist
public class ZahlenRaten {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int unter, ober, zufall, eingabe, zaeler = 0;
unter = sc.nextInt();
ober = sc.nextInt();
zufall = (int) (Math.random() * (ober - unter) + unter);
do {
zaeler++;
System.out.println("N " + zaeler + " Geben Sie die zahl ein");
eingabe = sc.nextInt();
if (eingabe < unter || eingabe > ober) {
System.out.println("ausser intervalgrenze");
} else {
int mitte = (ober - unter) / 2 + unter;
if (zufall > mitte) {
unter = mitte;
System.out.println("zwischen " + unter + "und" + ober);
} else {
if (zufall < mitte) {
ober = mitte;
System.out.println("zwischen " + unter + "und" + ober);
} else {
System.out.println(String.format(
"Sie haben die zahl beim %s Versuch erraten",
zaeler));
}
}
}
} while (eingabe != zufall);
}
}
Deine Ausgabe Sie haben die zahl beim 6 Versuch erraten
N 7 Geben Sie die zahl ein
Entsteht, wenn die **Mitte ** der gesuchten Zahl entspricht, die richtige Zahl aber nicht eingegeben wurde.
eingabe == Zufall trifft eben nicht zu.
Das habe ich oben schon versucht zu sagen.
Die richtige Zahl wurde eingegeben, wenn die while-Schleife verlassen wird, denn das ist ja schließlich die Bedingung für das verlassen der Schleife.
Warum soll ich dann in der Schleife die Ausgabe machen, dass die Zahl gefunden worden sei ?
In der Schleife soll das Programm nur Hinweise geben.