Zahlenratenspiel

BlackSalad

Bekanntes Mitglied
Hallo,

Ich brauch dringend Hilfe.

ich muss bis morgen so ein Aufgabenblatt abgeben und ich komme bei der wichtigsten Aufgabe nicht zurecht. Ich hab auch schon ewig recherchiert,aber ich kriegs einfach nicht hin.

gefragt ist ein zahlenspiel.

Computer gegen Computer und eins mit mensch gegen Computer. Das meiste ist schon als code vorgegeben, aber ich komme nicht zurecht.

Ich blicke einfach nicht durch, weil ich den Code nicht verstehe der vorgegeben ist.



Würd den aber ungern hier posten, weil ichs ja eigentlich nicht darf bzw. mirs danna ls Plagiat oder so ausgelegt wird.

Aber bitte, wenn jemand nichts zu tun hat grade oder so. ich wär echt dankbar, weil ich sitze schon tage dran und langsam verzweifle ich. ;(

Den vorgegebene code würde ich euch per Pn schicken oder so.

Bin noch der totale Anfänger und die Vorlesung ista usgefallen und wir sollen es uns selbst erarbeiten, aber ich blicke nicht durch.

:noe:

Vielen Dank, für jede Antwort!


Liebe Grüße Katrin
 
Zuletzt bearbeitet von einem Moderator:

BlackSalad

Bekanntes Mitglied
Kann ich euch das ganze nicht mal per pn schicken?

Ich verstehs einfach nicht, und die Übung ist erst nach abgabetermin wieder und kennen tu ich noch nicht wirklich jemanden.

Ihr seid meine letzte Hoffnung

ich hab auch selbst schon was geschrieben, aber das funktioniert nicht.

Ich kann das auch mal posten, aber ich habe das gefühl, dass es daran liegt, dass es nicht geht, dass ja schon das gerüst gegeben ist und mein code nicht passt, weil ich das andere nicht verstehe :noe:
 
G

Gast2

Gast
Das wäre dann wohl nen Fall für die Jobbörse (mit Expresszuschlag?^^)
Ich denke niemand wird sich hier hinsetzen und dir die Aufgabe schreiben nur weil du nicht gelernt hast :)

EDIT:
Kannst dich gern mal per PN melden, aber nicht mit der Aufgabe sondern bitte mit Preisvorstellungen :bae:
 
Zuletzt bearbeitet von einem Moderator:

BlackSalad

Bekanntes Mitglied
dann sagt mir bitte wozu das forum hier ist? Ich suche hilfe, ich will nicht, dass ihr mir die aufgabe macht, sondern mir einfach hilft es zu lernen, es einfach zu verstehen. Ich habe soviel recherschiert und gelernt und mich bemüht, aber manchmal ist man einfach an einem punkt, wo man hilfe braucht und ich dachte solche Hilfe soll so ein forum geben.

Ich bin einfach am verzweifeln und suche rat. Und da ich das Gerüst hier nicht posten kann, will ich es per pn schicken.

Aber ja ist ok, das wars dann wohl, kriege nirgendwo hilfe .. :noe:
 
G

Gast2

Gast
dann sagt mir bitte wozu das forum hier ist? Ich suche hilfe, ich will nicht, dass ihr mir die aufgabe macht, sondern mir einfach hilft es zu lernen, es einfach zu verstehen. Ich habe soviel recherschiert und gelernt und mich bemüht, aber manchmal ist man einfach an einem punkt, wo man hilfe braucht und ich dachte solche Hilfe soll so ein forum geben.

Ich bin einfach am verzweifeln und suche rat. Und da ich das Gerüst hier nicht posten kann, will ich es per pn schicken.

Aber ja ist ok, das wars dann wohl, kriege nirgendwo hilfe .. :noe:
Es ist halt nicht so einfach jemandem zu helfen der keinen Code oder ähnliches postet.
Und ich denke es wird sich niemand hier 2 3h Zeit nehmen um dein Versäumnis zu lernen auszubaden.
 

ARadauer

Top Contributor
Ich habe soviel recherschiert und gelernt und mich bemüht, aber manchmal ist man einfach an einem punkt, wo man hilfe braucht...
ja wir helfen dir doch.
Post deinen Code und stell konkrete Fragen, aber wir schreiben dir sicher nicht eine Hausübung.

und ganz ehrlich! so viel hast du nicht recherchiert, wir haben uns heute schon intensiv mit eurer aufgabe beschäftigt..

Ihr kennt euch sicher http://www.java-forum.org/hausaufgaben/107869-ratespiel.html
 

slawaweis

Bekanntes Mitglied
Würd den aber ungern hier posten, weil ichs ja eigentlich nicht darf bzw. mirs danna ls Plagiat oder so ausgelegt wird.

Aber bitte, wenn jemand nichts zu tun hat grade oder so. ich wär echt dankbar, weil ich sitze schon tage dran und langsam verzweifle ich. ;(

Den vorgegebene code würde ich euch per Pn schicken oder so.
Du kannst es mir per PN schicken, ich sehe es mir an und sage dann, ob und wie ich Dir helfen kann. Aber bitte keine Viren oder eine Wochenendaufgabe.

Slawa
 

BlackSalad

Bekanntes Mitglied
mein Teil für das erste TODO wäre:

int toBeGuessed = min + ((int)(Math.random() * (max - min + 1)));
int max=100;
int min=1;



while (myGuess!=toBeGuessed)

myGuess= min + ((int)(Math.random() * (max - min + 1)));

{if (myGuess<toBeGuessed)
min=myGuess; }
{if (myGuess>toBeGuessed)
max=myGuess;}
 

BlackSalad

Bekanntes Mitglied
ich hab aber das problem, dass meine Idee nicht funktioniert. Das ding spukt nichts aus. Und bei dem System.out.println steht dann auch irgendwie result, aber weiß nicht wie ich das einbauen soll

protected int checkGuess(int myGuess) {
int result;



int max=100;
int min=1;

int toBeGuessed = min + ((int)(Math.random() * (max - min + 1)));




{while (myGuess!=toBeGuessed)

myGuess= min + ((int)(Math.random() * (max - min + 1)));

{if (myGuess<toBeGuessed)
min=myGuess; }
{if (myGuess>toBeGuessed)
max=myGuess;

} }







System.out.println("The " + ++numberOfGuesses + ". guess is \"" + myGuess + "\" and it is " + (result < 0 ? "too small." : result > 0 ? "too high." : "PERFECT!"));
return result; }



das dicke ist schon vorgegeben.
 

slawaweis

Bekanntes Mitglied
ich habe es mir angesehen und die Aufgabe ist die binäre Suche zu verstehen und zu implementieren:

Binäre Suche ? Wikipedia

1. Die minimalen bzw. maximalen Werte sind bereits in den Klassenvariablen MIN und MAX gespeichert, diese sollten nicht in checkGuess neu angelegt werden.

2. in checkGuess gehört eine einfache Abbildung von dem Annahmewert in -1, 0 und 1, abhängig von dem gesuchtem Wert.

3. in playByMyself gehört eine Schleife welche die binäre Suche ausführt und bei jedem Durchlauf checkGuess ausführt. Wenn checkGuess 0 zurück liefert, dann wird die Schleife abgebrochen. Wenn die Schleife ohne Ende läuft, hat man was falsch implementiert. In einer korrekten Implementierung muss checkGuess immer irgendwann 0 zurückgeben.

4. playWithYou sieht genauso wie playByMyself aus, außer dass anstatt den Annahmewert aus der Mitte (oder über Math.random()) zu bekommen, dieser von dem Anwender über inputInt() gelesen wird.

5. (Optional) ich weis nicht ob es vorgegeben ist, aber ich würde MIN und MAX von der Kommandozeile einlesen.

Slawa
 

BlackSalad

Bekanntes Mitglied
Sehr cool,

vielen Dank. Ich werde spätestens morgen früh meine Fortschritte posten. Jetzt blick ich schon besser durch. Wir hatten nie sowas in der Art. Ist ganz neu und ich finde es sehr verwirrend, wenn man nicht mal weiß, dass es sowas gibt.


vielen, vielen, herzlichen Dank!
 

skuzzle

Mitglied
wie aradauer in meinem thread geschrieben hatte is das teilen und herrschen prinzip da echt toll :)

"zufallszahl zwischen 0 und 100, dein computernimmt die hälte ..50 ... zahl zu groß, also muss sie zwischen 0 und 50 liegen.. 25
zu klein.. also muss sie zwischen 25 und 50 liegen... 37 zu groß, also zwischen 25 und 37.. wir kommen der sache schon näher.. so lange machen bis gewählte zahl die zufallszahl ist... "
 

BlackSalad

Bekanntes Mitglied
wie aradauer in meinem thread geschrieben hatte is das teilen und herrschen prinzip da echt toll :)

"zufallszahl zwischen 0 und 100, dein computernimmt die hälte ..50 ... zahl zu groß, also muss sie zwischen 0 und 50 liegen.. 25
zu klein.. also muss sie zwischen 25 und 50 liegen... 37 zu groß, also zwischen 25 und 37.. wir kommen der sache schon näher.. so lange machen bis gewählte zahl die zufallszahl ist... "

das ist mir so schon klar, nur irgendwie krieg ich das nicht in code.

Aber meinst du wir sollen festbestimmen, dass der computer immer dann 50 und dann 25 nimmt oder wie?

funktioniert das dann schon mit dem min + ((int)(Math.random() * (max - min + 1))); ?


oder muss man da quasi immer dann eingeben, dass es quasi die hälfte von dem max wert nehmen soll?

hast dus hinbekommen?
 

ARadauer

Top Contributor
funktioniert das dann schon mit dem min + ((int)(Math.random() * (max - min + 1))); ?
nein natürlich nicht, random ist was zufälliges..

von = from
bis = to

zahl ist = from + (to-from) /2;

ist die zahl zu klein:
from = (from + (to-from) /2)+1;

ist die zahl zu groß
to = (from + (to-from) /2)-1

im grunde simpel, mit papier und bleistifft kommt man bei solchen beispielen auch sehr weit... dann verstehts mans mal und kann es dann programmieren...
 

slawaweis

Bekanntes Mitglied
das ist mir so schon klar, nur irgendwie krieg ich das nicht in code.

Aber meinst du wir sollen festbestimmen, dass der computer immer dann 50 und dann 25 nimmt oder wie?

funktioniert das dann schon mit dem min + ((int)(Math.random() * (max - min + 1))); ?


oder muss man da quasi immer dann eingeben, dass es quasi die hälfte von dem max wert nehmen soll?
auf der Wikipedia-Seite steht eigentlich alles, was Du brauchst, sogar eine Version des Algorithmus in Java. Es gibt zwei Möglichkeiten die binäre Suche zu implementieren, die Median-Variante und die Random-Variante. Bei der Median-Variante wird immer die Mitte eines Zahlenbereichs genommen, Zitat aus Wikipedia:

Java:
int mitte = erstes + ((letztes - erstes) / 2);
// Alternativ
int mitte = erstes + ((letztes - erstes) * 0.5);

Bei der Random-Variante wird eine Position über Zufall aus dem Bereich gewonnen.

Java:
int mitte = erstes + ((letztes - erstes) * Math.random());

Slawa
 

BlackSalad

Bekanntes Mitglied
Hallo, ich hab hier auch mehrere Bücher neben mir leigen und die binäre suche an solches glaube ich auch verstanden zu haben. Nur hab ich probleme bei der umsetzung in den code. vorallem check ich nicht, was schon vorgegeben ist.

da steht überall etwas von

puplic final static int und bei mir in dem vorgegebenen steht da was ganz anderes. :noe:
 

slawaweis

Bekanntes Mitglied
poste bitte was Du bereits in checkGuess, playWithYou und playByMyself hast, alles jeweils in java-Tags, wie hier zu sehen:

Java:
protected int checkGuess(int myGuess) {
  int result;

  // TODO

  System.out.println("The " + ++numberOfGuesses + ". guess is \"" + myGuess + "\" and it is " +
                     (result < 0 ? "too small." : result > 0 ? "too high." : "PERFECT!"));
  return result;
  }

Java:
protected void playWithYou() {

  // TODO: PUT YOUR CODE HERE

  }

Java:
protected void playByMyself() {

  // TODO: PUT YOUR CODE HERE

  }

Slawa
 

BlackSalad

Bekanntes Mitglied
also für das erste Todo hab ich jetzt das hier gebastelt. aber irgendwie spuckt eclipse da fehler aus.



Java:
protected int checkGuess(int myGuess) {
		int result;

		int MIN=0, MAX=array.length-1;
		
		
		while (MIN<=MAX);
		myGuess(MIN+MAX)/2;
		
		if (array[myGuess]==toBeGuessed)
			
			return myGuess;
			else if (array[myGuess] >toBeGuessed)
				MAX=myGuess-1;
			else	
				MIN=myGuess+1;
 

ARadauer

Top Contributor
Kann es sein, dass diese checkGuess Methode über die ich mich im anderen Thread so aufgeregt habe von eurem Lehrer stammt?

Ha lustig... im grunde will man den Schülern einen guten Rahmen zum anfangen bieten, ist dieser Rahmen schlecht, ist es umso schwerer seinen Teil dazu zu programmieren, da man ja vielleicht nicht verstanden hat was der lehrer mit seinen Anfängen vor hatte...


Diese int result in checkGuess... was ist das? Anzahl der Versuche, Unterschied zwischen der zu finden zahl und dem versuch, ist das die zu finden zahl? was soll das soll die bedeuten?
 

slawaweis

Bekanntes Mitglied
Java:
int MIN=0, MAX=array.length-1;
in der Aufgabe, die Du per PN geschickt hast, gibt es kein array. Weiterhin solltest Du die Klassenvariablen MIN und MAX nicht durch Funktionsvariablen überlagern.

Java:
		while (MIN<=MAX);
		myGuess(MIN+MAX)/2;
Endlosschleife, die gar nicht in checkGuess gehört.

Slawa
 

BlackSalad

Bekanntes Mitglied
ich weiß gar nicht was das checkGuess soll.


okay ich werds nochmal anders versuchen.

ich vertseh nicht wirklich, was schon vorgegeben ist und was ich noch selbst schreiben soll.
 

slawaweis

Bekanntes Mitglied
ok, dann hier das erste TODO, genauso wie es in dem JavaDoc zu der Funktion steht:

Java:
protected int checkGuess(int myGuess) {
  int result;

  if(myGuess < toBeGuessed)
    result = -1;
  else if(myGuess > toBeGuessed)
    result = 1;
  else
    result = 0;

  System.out.println("The " + ++numberOfGuesses + ". guess is \"" + myGuess + "\" and it is " +
                     (result < 0 ? "too small." : result > 0 ? "too high." : "PERFECT!"));
  return result;
  }

Wird es klarer?

Slawa
 

BlackSalad

Bekanntes Mitglied
also für das erste Todo hab ich jetzt das hier gebastelt. aber irgendwie spuckt eclipse da fehler aus.



Java:
protected int checkGuess(int myGuess) {
		int result;

		int MIN=0, MAX=array.length-1;
		
		
		while (MIN<=MAX);
		myGuess(MIN+MAX)/2;
		
		if (array[myGuess]==toBeGuessed)
			
			return myGuess;
			else if (array[myGuess] >toBeGuessed)
				MAX=myGuess-1;
			else	
				MIN=myGuess+1;


was muss denn dann statt dem array da hin?

könnt ihr mir vielleicht mal ausführlich erklären, was da jetzt nicht stimmt? :(
 

mariusbopp

Bekanntes Mitglied
du solltest eig das programm selber scheriben ;)

wie weit bist den denn jetzt ??
ich nehme an du hast die zufalls zahl erzeugt ,die eingabe des benutzers hast du auch schon?!

das is das prob wenn man dann von andern immer schnipseln nimmt und sich daraus ein prog bastel will und es aber eig ganicht versteht( ist nicht böse gemeint) ich will nur das du versuchst mal nachzudenken weil dann klappt es bei dem nächsten programm was dum achen musst auch besser und du musst nicht immer "puzzeln"

es geht jetzt also um das annähern der random zahl richtig?!
 

BlackSalad

Bekanntes Mitglied
ok, dann hier das erste TODO, genauso wie es in dem JavaDoc zu der Funktion steht:

Java:
protected int checkGuess(int myGuess) {
  int result;

  if(myGuess < toBeGuessed)
    result = -1;
  else if(myGuess > toBeGuessed)
    result = 1;
  else
    result = 0;

  System.out.println("The " + ++numberOfGuesses + ". guess is \"" + myGuess + "\" and it is " +
                     (result < 0 ? "too small." : result > 0 ? "too high." : "PERFECT!"));
  return result;
  }

Wird es klarer?

Slawa



danke erstmal. Ich gehs grad mal durch und schaue obs mir klar wird...
 

BlackSalad

Bekanntes Mitglied
ja danke, irgednwie ist es mir jetzt klar. :eek:

Aber iregdnwie verstehe ich nicht, was das nun mit was in wikipedia und in meinem Buch steht gemeinsam hat .... :/ also ich wäre da nie drauf gekommen glaub ich.


also ich meine, gemeinsamkeiten sehe ich auch, aber grad das mit dem result hätt ich so nicht gedacht.
 

mariusbopp

Bekanntes Mitglied
was muss denn dann statt dem array da hin?

was ein array ist weißt du oder??

arrays speichern daten des selben typs ab kannst du dir vorstellen wie eine 2zeilige tabelle
oben steht 0 1 2 3 4....n und dann ordnest du deine daten denn feldern zu...

d.h ein array ist in diesem fall nicht nötig da du die werte ja nicht speichern willst sondern nur den 1nen wert brauchst
 

BlackSalad

Bekanntes Mitglied
ja, was ein arry ist ist mir klar, nur ist in allen beispieln halt dieses blöde array und wusste dann nicht, was ich stattdessen hintun soll.



Ist es normal, dass da keine ausgabe kommt, wenn ich das jetzt ausführe?
 

slawaweis

Bekanntes Mitglied
Aber iregdnwie verstehe ich nicht, was das nun mit was in wikipedia und in meinem Buch steht gemeinsam hat .... :/ also ich wäre da nie drauf gekommen glaub ich.


also ich meine, gemeinsamkeiten sehe ich auch, aber grad das mit dem result hätt ich so nicht gedacht.
das hat nichts mit einem Buch zu tun. Bei einem Algorithmus zählt die Vorgehensweise, nicht wie es implementiert ist. Eurer Dozent hat einen Rahmen für die Implementierung vorgegeben. Ihr müsst also den Algorithmus in diesen Rahmen quetschen, wie Teig in eine beliebige Backform. Das gehört auch zu Übung, Algorithmen zu verstehen und anwenden zu können, ohne es nur stur aus irgendeinem Buch oder Webseite abzuschreiben.

Slawa
 

mariusbopp

Bekanntes Mitglied
allerdings!!!

du solltest wirklich mal versuchen nich einfach alles abzuschreiben /zu übernehmen klar das ist das einfachste aber wenn du auf längere zeit was mit java machen willst bringt es dich ja nicht weiter!

you know?!:)
 

BlackSalad

Bekanntes Mitglied
Ja es ist nur immer so, dass wenn ich dann erst mal das programm zusammen geflickt hab und es richtig ist, dann verstehe ich auch wie es funktioniert und wieso es so und so nicht funktioniert, nur wnen ich dann vor so einer aufgabe stehe und sowas in der art noch nie gesehen habe, dann bin ich immer komplett ahnungslos und verwirrt.


also bei dem zweiten TODO braucht man ja jetzt ein array, weil ja der Mensch quasi über die Konsole die Zahl,die er rät eingeben muss, richtig?

und dann funktioniert das ja ähnlich wie das andere oder?
 

slawaweis

Bekanntes Mitglied
ich muss jetzt weg. Hier die Quasilösung:

Java:
protected void playByMyself() {

  int min = MIN;
  int max = MAX;

  while(true) {
    int myGuess = ...;

    int result = checkGuess(myGuess);

    if(result == -1)
      {
      // ...
      }
    else if(result == 1)
      {
      // ...
      }
    else
      {
      break;
      }
    }
  }

Slawa
 

BlackSalad

Bekanntes Mitglied
Danke, habs noch nicht verstanden, aber die anderen helfen mir bestimmt auch weiter.

veilen , vielen Dank für deine Hilfe.
 
Zuletzt bearbeitet:

BlackSalad

Bekanntes Mitglied
also ich bin jetzt erst mal noch bei dem playwithyou Teil.

irgendwie sagt eclipse mir immer, dass das array falsch ist..


Java:
 int myGuess=Integer.parseInt(args[0]);

args cannot be resolved to a variable kommt dann immer. Woran liegt das denn?
 

mariusbopp

Bekanntes Mitglied
wieso willst du es denn in einem array machen?? es ist doch im grunde nichts anderes wie das mit dem comp nur das die zahl des pc durch deine eingabe ersetzt wird oder?!
sprich an der stelle vo vorger die geratenen zahlen des pc waren müssen jetzt nur deine eingaben stehen
den verwendungszweck eines arrays sehe ich hier nicht:bahnhof:

soweit klar?
 

BlackSalad

Bekanntes Mitglied
aber soll nicht der benutzer über die konsole die Zahlen eingeben?

wenn ich doch will, dass der benutzer etwas über die konsole eingibt, benutzt man doch array?

oder soll ich dann schon eine zahl eingeben, die dann immer die gleiche ist und nicht vom benutzer über die konsole eingegeben werden muss?!
 

ARadauer

Top Contributor
args cannot be resolved to a variable kommt dann immer. Woran liegt das denn?
args gibts nicht

aber soll nicht der benutzer über die konsole die Zahlen eingeben?
wenn ich doch will, dass der benutzer etwas über die konsole eingibt, benutzt man doch array?

wenn man das programm über die konsole starte und gibt beim starten noch ein paar parameter an, sind die im String[] args parameter der main verfügbar
 

mariusbopp

Bekanntes Mitglied
nee nee also du hast die eingabe des benutzers die wird in eine var geschrieben getestet ob = random zahl wenn nicht benutzer gibt neue zahl ein var wir überschrieben und erneut getestet
also ein array brauchst du def nicht
ich mach es immer über einen BufferedReader kannst ja mal googeln oder ich schick dir n code
 

Neue Themen


Oben