Java Zahl erraten Methode?

5 Antworten

Naja, du gibst ja auch die Variable "a" zurück, obwohl du "c" und "d" vergleichst. und wenn die beiden gleich sind ist "a" nicht unbedingt "c"...

Außerdem erschließt sich mir nicht wie der Computer hier etwas "erraten" soll, schließlich kommt er ja mit dieser Methode immer irgendwann auf das Ergebnis

ZwiggaMuggi 
Fragesteller
 24.04.2018, 19:20

ein = setzt einen Wert zwei = vergleichen zwei werte ...

0
user373h383  24.04.2018, 19:23
@ZwiggaMuggi

Ja danke, ich kann programmieren. Das ändert nichts an der Tatsache dass du "c" und "d" miteinander vergleichst, nur im im letzten else dann "a" zurück zu geben. Aber "a" wird von dir niemals angeguckt. Was erwartest du denn als Ausgabe? Dass das Ergebnis der Methode am Ende die Zahl "d" ist? Wie soll denn das funktionieren wenn du "a" niemals mit irgendwas vergleichst... Der ganze Algorithmus ergibt so keinen Sinn

0
ZwiggaMuggi 
Fragesteller
 24.04.2018, 19:49
@user373h383

Ich muss a und b ja mit nichts vergleichen, es ist ja nur der Bereich in dem die Zahlen vorkommen können und wenn die geratene Zahl größer ist als die tatsächliche bedeutet das ja, dass nur noch Zahlen überprüft werden müssen, die kleiner als die geratene Zahl sind weshalb ich a bzw b dann den Wert der geratenen Zahl zuweise je nachdem ob diese größer oder kleiner als d war.

Ich hoffe der Ansatz ist verständlich.

0
user373h383  24.04.2018, 19:56
@ZwiggaMuggi

Aber warum gibst du dann "a" zurück? "a" ist doch nicht zwangsläufig "c" wenn "c" "d" entspricht. wenn du zB raten(5,8) einträgst, und beim ersten mal ist "c" zufälligerweise direkt gleich "d", liefert die Methode trotzdem den Wert von "a" zurück, der ja 5 ist. Du hast einen absoluten Gedanken-Dreher...

1
ZwiggaMuggi 
Fragesteller
 24.04.2018, 20:24
@ZwiggaMuggi

ja ich returne jetzt c jetzt funktioniert es wie ich es mir vorgestellt habe

0

Willst du zufällig lieber

(Math.random()*(b+a))

nehmen?

Woher ich das weiß:Berufserfahrung – Softwareentwicklerin
ZwiggaMuggi 
Fragesteller
 24.04.2018, 19:00

funktioniert dann noch Weniger :(

0

So, da du meine andere Antwort nicht verstanden hast, habe ich dir dein Programm mit der Raten Methode so geschrieben, wie ich's machen würde.

Man beachte, ich habe für die Variablen keine einzelnen Buchstaben verwendet, sondern aussagekräftige Namen, so kann es auch zu keinen Verwechslungen kommen. Bitte verinnerliche dies bei deinen Programmen. Außerdem, schreibe Kommentare bzw. JavaDocs zu deinen Methoden

public class Raten {
	
	public static int versuche = 0;
	public static int gesuchteZahl = 13;

	public static void main(String[] args) {
		raten(0, 1000);
		System.out.println("Der Computer hat " + versuche + " versuche gebraucht, um die Zahl zu erraten.");
	}
	
	/**
	 * 
	 * @param minZahl Die untere Grenze der gesuchten Zahlen
	 * @param maxZahl Die obere Grenze der gesuchten Zahlen
	 * @return die geratene Zahl
	 */
	public static int raten(int minZahl, int maxZahl){
		versuche++;
		Random random = new Random();
		int gerateneZahl = random.nextInt(maxZahl - minZahl + 1) + minZahl;
		if(gerateneZahl < gesuchteZahl){
			return raten(gerateneZahl, maxZahl);
		} else if(gerateneZahl > gesuchteZahl){
			return raten(minZahl, gerateneZahl);
		} else {
			return gerateneZahl;
		}
	}

}
Der Computer hat 20 versuche gebraucht, um die Zahl zu erraten.

Bild zum Beitrag

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung
 - (Computer, programmieren, Java)

Du kommst viel effizienter ans Ziel, wenn du mit einer for Schleife arbeitest. Da gibt es jede Zahl nur einmal. Hat zwar genausowenig Sinn wie das aktuelle, geht aber deutlich schneller und sparender im Durchschnitt (besonders bei etwas größeren Zahlen).

ZwiggaMuggi 
Fragesteller
 24.04.2018, 20:32

Wieso macht es so denn keinen Sinn?

0
Kieselsaeure  24.04.2018, 20:34
@ZwiggaMuggi

Na was willst du denn damit erreichen? Das hat doch praktisch betrachtet keinen Sinn, wenn du schon weisst wonach du überhaupt suchst. Naja, wie auch immer, die Variante mit for ist durchschnittlich effizienter.

0
ZwiggaMuggi 
Fragesteller
 24.04.2018, 20:51
@Kieselsaeure

Kann zum Beispiel Hilfreich für Wurzelberechnung nach dem Heron-Verfahren sein.

0
Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung
ZwiggaMuggi 
Fragesteller
 24.04.2018, 19:04

Wie verwende ich das?

0
Xearox  24.04.2018, 20:16
@ZwiggaMuggi

-.-

int c = random.nextInt(max - min + 1) + min;

was ist daran denn so schwer mensch :-(

1
ZwiggaMuggi 
Fragesteller
 24.04.2018, 20:41
@Xearox

Der Fehler war, dass ich a statt c returnt habe aber trotzdem Danke

0