# Zahlenratenspiel



## BlackSalad (28. Okt 2010)

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


----------



## Jango (28. Okt 2010)

nichts - der OT hat editiert...


----------



## Marco13 (28. Okt 2010)

Als Tipp: Schließ' dich mit anderen Leuten kurz, die auch ein http://www.java-forum.org/hausaufgaben/107869-ratespiel.html schreiben müssen. So lernt man auch am ehesten was....

EDIT: *grummel* ... immer diese lästigen Wintersemesteranfänge .... 
:joke:


----------



## BlackSalad (28. Okt 2010)

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:


----------



## Gast2 (28. Okt 2010)

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:


----------



## BlackSalad (28. Okt 2010)

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:


----------



## Jango (28. Okt 2010)

BlackSalad hat gesagt.:


> dann sagt mir bitte wozu das forum hier ist?



Für Leute, die sich selber Gedanken machen und nicht weiterkommen.


----------



## Gast2 (28. Okt 2010)

BlackSalad hat gesagt.:


> 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 (28. Okt 2010)

> 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


----------



## ARadauer (28. Okt 2010)

bis 20:15 is ja noch zeit schick mirs schnell, wenns nicht kompletter mist ist, helf ich dir


----------



## slawaweis (28. Okt 2010)

BlackSalad hat gesagt.:


> 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 (28. Okt 2010)

habe es euch geschickt


----------



## BlackSalad (28. Okt 2010)

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 (28. Okt 2010)

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 (28. Okt 2010)

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 (28. Okt 2010)

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 (29. Okt 2010)

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 (29. Okt 2010)

skuzzle hat gesagt.:


> 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?


----------



## mariusbopp (29. Okt 2010)

nein einzugeben ist das nicht das er die hälfte nimmt!
guck ma ob du mit *if-anweisungen* weiter kommst?!


----------



## ARadauer (29. Okt 2010)

> 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 (29. Okt 2010)

BlackSalad hat gesagt.:


> 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?
> 
> ...


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:


```
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.


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

Slawa


----------



## mariusbopp (29. Okt 2010)

dh letzteres liefert nicht den mittelwert sondern einen beliebeigen wert in aus dem bereich?! oO


----------



## BlackSalad (29. Okt 2010)

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 (29. Okt 2010)

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


```
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;
  }
```


```
protected void playWithYou() {

  // TODO: PUT YOUR CODE HERE

  }
```


```
protected void playByMyself() {

  // TODO: PUT YOUR CODE HERE

  }
```

Slawa


----------



## mariusbopp (29. Okt 2010)

erstmal puBlic....
das ist eine konstante, und diese kannst du beliebig umbenennen


----------



## BlackSalad (29. Okt 2010)

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




```
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 (29. Okt 2010)

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 (29. Okt 2010)

```
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.


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

Slawa


----------



## mariusbopp (29. Okt 2010)

is das richtig mit dem 
[JAVA=4]MAX=array.length-1;
[/code] 

kann auch sein das ichmich grade irre ??

edit: okay war jemand schneller


----------



## BlackSalad (29. Okt 2010)

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 (29. Okt 2010)

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


```
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 (29. Okt 2010)

BlackSalad hat gesagt.:


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




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 (29. Okt 2010)

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 (29. Okt 2010)

slawaweis hat gesagt.:


> ok, dann hier das erste TODO, genauso wie es in dem JavaDoc zu der Funktion steht:
> 
> 
> ```
> ...





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


----------



## BlackSalad (29. Okt 2010)

ja danke, irgednwie ist es mir jetzt klar. 

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 (29. Okt 2010)

BlackSalad hat gesagt.:


> 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 (29. Okt 2010)

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?


----------



## mariusbopp (29. Okt 2010)

normalerweiße sollte eine kommen System.out.println() ist ja der befehl für eine ausgabe

irgendwo steckt noch ein fehler :rtfm:


----------



## slawaweis (29. Okt 2010)

BlackSalad hat gesagt.:


> 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 (29. Okt 2010)

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 (29. Okt 2010)

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 (29. Okt 2010)

ich muss jetzt weg. Hier die Quasilösung:


```
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 (29. Okt 2010)

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

veilen , vielen Dank für deine Hilfe.


----------



## BlackSalad (29. Okt 2010)

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

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



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

_args cannot be resolved to a variable_ kommt dann immer. Woran liegt das denn?


----------



## mariusbopp (29. Okt 2010)

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 (29. Okt 2010)

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 (29. Okt 2010)

> 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 (29. Okt 2010)

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


----------



## BlackSalad (29. Okt 2010)

mariusbopp hat gesagt.:


> normalerweiße sollte eine kommen System.out.println() ist ja der befehl für eine ausgabe
> 
> irgendwo steckt noch ein fehler :rtfm:



ja das dachte ich mir auch.. nur wo ist der fehler? :/


----------



## ARadauer (29. Okt 2010)

es gibt kein args und du benutz es...


----------



## timbeau (29. Okt 2010)

Die Eingabe des Benutzers kannst du auch über System.in realisieren. 

Die Startparameter sind im Programm nicht mehr änderbar, wenn du während des Programms Eingaben hast musst du die dynamisch einlesen. 

Dein Array ist korrekt, nur musst du Eclipse dann auch eine Variable als Start mitgeben. 

Unter "run configuration" -> "(x)= Arguments" -> "Program arguments"


@Lernmethode: Dein Ansatz programmieren zu lernen ist nicht effizient. Hatte ähnliche Probleme zu Beginn meines Studiums und bin auch bös hingefallen in den ersten Klausuren. Man versteht fast nichts aus fertigen Programmen mE.


----------



## mariusbopp (29. Okt 2010)

die eingabe is z.b so zu realisieren:


```
BufferedReader eing = new BufferedReader(new InputStreamReader(System.in));
        int tip=Integer.parseInt(eing.readLine());
```

es fehlen aber noch 2 kleine dinge die findest du aber raus


----------



## timbeau (29. Okt 2010)

Viel zu viel marius ;-)


----------



## BlackSalad (29. Okt 2010)

timbeau hat gesagt.:


> Die Eingabe des Benutzers kannst du auch über System.in realisieren.
> 
> Die Startparameter sind im Programm nicht mehr änderbar, wenn du während des Programms Eingaben hast musst du die dynamisch einlesen.
> 
> ...



also ich dab das problem ja schon bei dem teil davor ohne array, dass einfach keien ausgabe kommt.

wegen der Lernmedthode:

das hier ist son übungsblatt, dass wir machen müssen. Aber kannst du mir sagen wie ich vorgehen muss, um es besser zu lernen? Hab nämlich echt das Gefühl absolut nicht weiter zu kommen.


----------



## mariusbopp (29. Okt 2010)

timbeau hat gesagt.:


> Viel zu viel marius ;-)


aber erfüllt seinen zweck^^
keine ahnung ich hab mir eingaben so angewöhnt seit dem mach ich sie so^^

klar man könte es auch  über System.in.read() machen...


----------



## BlackSalad (29. Okt 2010)

ich guck mal ob ich jetzt weiter komme. 

Danke marius.


----------



## timbeau (29. Okt 2010)

Ist immer schwierig aus "Problem davor" auf das Problem zu schließen. Vielleicht habe ich das aber auch überlesen. 

Bzgl der Lernmethode ist es nicht schlecht sich in einem Forum wie diesem hier um hilfe zu bemühen. Besser als nur aus dem Netz kopieren. Aber so lange zu fragen, bis einem einer das komplette Programm oder fast fertige Codeschnipsel zu bestimmten Bereichen postet ist Selbstbetrug. 

Wie aradauer glaube ich schon sagte. Erst Stift und Papier und die Lösung aufschreiben/zeichen und verstehen. Und dann die Sachen umsetzen. 

Eclipse bietet auch eine Debugfunktion die man unbedingt kennen und nutzen sollte. 

Wie weit bist du denn nochmal?

@marius: Du machst es ja über System.in im Kern. Ist glaube ich auch so üblich


----------



## mariusbopp (29. Okt 2010)

BlackSalad hat gesagt.:


> das hier ist son übungsblatt, dass wir machen müssen. Aber kannst du mir sagen wie ich vorgehen muss, um es besser zu lernen? Hab nämlich echt das Gefühl absolut nicht weiter zu kommen.


 ich würde dir entfehlen mal ganz am angang anzufangen guck dir die datentypen an usw dann wie klassen aufgebaut sind dann wie schleifen implementiert werden if anweisungen usw... und dann schritt für schritt weiter machen:rtfm:
dann klappt das auch schon


----------



## ARadauer (29. Okt 2010)

> Aber kannst du mir sagen wie ich vorgehen muss, um es besser zu lernen?


sich damit beschäftigen... was du machst : fragen -> antwort in code einfügen -> geht nicht -> fragen ->

wer sowas postet:


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


hat genau 0 Interesse irgend etwas zu lernen ;-) So siehts jedenfall für uns aus...

Sorry ist so, ich weiß wir dir zumute ist, ich sag dir nur eines:  Nicht aufgeben! Du schaffst das! ;-)


Also poste mal alles was du bis jetzt hast, sag was du jetzt genau vor hast und wo das problem ist...


----------



## BlackSalad (29. Okt 2010)

jetzt sagt es aber das gleiche bei dem BufferedReader wie bei dem args. 


Wie schaffe ich, dass es das anerkennt? :/


----------



## mariusbopp (29. Okt 2010)

BlackSalad hat gesagt.:


> jetzt sagt es aber das gleiche bei dem BufferedReader wie bei dem args.
> 
> 
> Wie schaffe ich, dass es das anerkennt? :/



hast du den import gemacht und dann bei der main class _throw_?? hab ja gesagt das da was fehlt bei dem bufferedreader... wollte das du dir ma selber gedanken machst

poste mal wie ARadauer sagt deinen kompletten code was du bis jetzt hast...


----------



## timbeau (29. Okt 2010)

Code!


----------



## ARadauer (29. Okt 2010)

> jetzt sagt es aber das gleiche bei dem BufferedReader wie bei dem args.


stimmt nichit ;-)

ok du arbeitest ja mit eclipse oder? da isr recht so ein rotes x

fährst du drüber steht da BufferedReader cannot resolved to a type.
klickst du drauf steht da import BufferedReader , da klickst du drauf. fertig!


----------



## BlackSalad (29. Okt 2010)

also ich habe folgendes:



```
protected void playWithYou() {

		
		int result;
		
		System.out.println("Tell me your guess");
 
// soll vom benutzer eine Eingabe über die Konsole fordern
		
	int myGuess=Integer.parseInt(args[0]);
		                      
// damit will ich, dass das was der Benutzer, dann in die Konsole eingibt, genommen wird als myGuess		
		
		
			  if(myGuess > toBeGuessed)
			    result = 1;
System.out.println ("Your guess is "+myGuess+" and it is to high")

			  else if(myGuess < toBeGuessed)
			    result = -1;
			  
System.out.println ("Your guess is "+myGuess+" and it is to small")

else
			    result = 0;

System.out.println ("Your guess is "+myGuess+" and it is perfect.)

// damit will ich, dass der computer wenn die eingegebene Zahl zu groß ist, ausgegeben wird, dass 
//die zahl zu groß und anderen falls zu klein ist. Oder ben, fass sie genau richtig ist. 
			 

//jetzt muss meiner Meinung nach noch die Anzahl der Versuche rein.
```


Komplett flasch?


----------



## Gast2 (29. Okt 2010)

BlackSalad hat gesagt.:


> Komplett flasch?


Nein.


----------



## BlackSalad (29. Okt 2010)

ARadauer hat gesagt.:


> stimmt nichit ;-)
> 
> ok du arbeitest ja mit eclipse oder? da isr recht so ein rotes x
> 
> ...




Danke,

jetzt ist das rote x wenigstens mal weg. Aber funktionieren tut es noch nicht.


----------



## mariusbopp (29. Okt 2010)

okay also du willst noch eine ausgabe wie "falsch es war zu hoch"??
dann musst du das in der if anweisung mit rein schreiben und denk dran ab 2 anweisungen in if zu klammern ---> {}

edit:steht ja schon drinne :noe: wie hab ich das übersehen??


----------



## timbeau (29. Okt 2010)

```
// soll vom benutzer eine Eingabe über die Konsole fordern
        
    int myGuess=Integer.parseInt(args[0]);
```

liest eben nichts über die Konsole ein sondern wie oben gesagt durch die startparameter. 

In der Konsole sieht das so aus > java programm param1 param2 ....

In eclipse hab ich es oben beschrieben. 

Du musst aber Marius Methode anwenden um im Programm Eingaben zu holen.

Bzgl if-else:

Setze schleifen!

if() {
}
else {
}


----------



## BlackSalad (29. Okt 2010)

ja das hab ich ja jetzt probiert.

ich dachte nur eigentlich, dass ich nur an den mit TODO markierten stellen etwas reinschreibend arf und jetzt steht ja quasi auch noch etwas ganza m anfang , nachdem ich den doppelklick wegen dem BufferedReader gemacht hab.



Oder zählt das nicht unter verändern? ???:L


----------



## timbeau (29. Okt 2010)

Wer verbietet es denn außer an TODOs was zu verändern? 

Im übrigen erstmal die anderen Stellen Lösen. 

Du kannst mal ne Klasse schreiben in der du nur einliest und ausgibst. Wenn das funktioniert kannst du das nächste Problem angehen. 

Immer versuchen ein großes Problem in kleine Probleme teilen.


----------



## mariusbopp (29. Okt 2010)

du brauchst den import ja um den reader zu verwenden aber wie hier schon jemand gesagt hat es gibt noch eine 2te variante über die tastatur einzulesen;-)

guck dir das mal an es wird 1. eine zufalls zahl erzeugt und 2. eine eingabe gelesen... jetzt guck mal wie du es machst die 2 werte zu vergleichen und wie due die schleife machen musst das du mehrere eingaben hast!!!


```
package ratespiel;
import java.io.*;
public class Main
{

    public static int Zahl(int n){
        double dezimalZahl = Math.random();
        int ganzZahl = (int)Math.round( dezimalZahl * n );
        return ganzZahl;

    }//ende Zahl


    public static void main( String[] args )throws IOException{

        System.out.println("geben sie ihren tip ein!");
        
            
        BufferedReader eing = new BufferedReader(new InputStreamReader(System.in));
        int tip=Integer.parseInt(eing.readLine());
        int zahl1 = Zahl(2);
System.out.println("die zufällige zahl: "+zahl1);
System.out.println("die eingegebene zahl: "+tip);

 }//ende main

}//ende Main
```


----------



## BlackSalad (29. Okt 2010)

wow, das sind grade zuviele verwirrende informationen für mich.

wrd mich damit jetzt mal auseinandersetzen..


----------



## BlackSalad (29. Okt 2010)

timbeau hat gesagt.:


> Wer verbietet es denn außer an TODOs was zu verändern?
> 
> Im übrigen erstmal die anderen Stellen Lösen.
> 
> ...





Das stehta uf unserem Arbeitsblatt, dass wir nichts ändern dürfen außer an den ToDo stellen.


----------



## mariusbopp (29. Okt 2010)

okay ich bin gleich auch mal ne std in der pause also nimm dir die zeit und setzt dich echt mal damit auseinander danach helf ich dir gerne weiter


----------



## BlackSalad (29. Okt 2010)

mariusbopp hat gesagt.:


> du brauchst den import ja um den reader zu verwenden aber wie hier schon jemand gesagt hat es gibt noch eine 2te variante über die tastatur einzulesen;-)
> 
> guck dir das mal an es wird 1. eine zufalls zahl erzeugt und 2. eine eingabe gelesen... jetzt guck mal wie du es machst die 2 werte zu vergleichen und wie due die schleife machen musst das du mehrere eingaben hast!!!
> 
> ...



Also cih darf nur an den TODO stellen, was ändern, also fällt wohl das BufferedRead raus und dann brauch ich wohl, das was du da gepostet hast. Aber verstehn tu ich das nicht.

Werd es versuchen es mal nachzuvollziehen, auch den ersten blick einfach nur verwirrend. 
Aber danke.


----------



## timbeau (29. Okt 2010)

Ich würde mal auf die TODO-Restriktionen keine Rücksicht nehmen. 

Die Klasse von Marius ist nur ein fix&fertiges Beispiel für eine Klasse die Eingaben einliest und diese ausgibt. 

Sowas solltest du dir eigentlich selbst erarbeiten. 

Dann kannst du die Funktion und nicht die ganze Klasse in dein Programm einbauen.


----------



## mariusbopp (29. Okt 2010)

guck dir das hiermal an!

so bin weg bis später


----------



## ARadauer (29. Okt 2010)

```
if(myGuess > toBeGuessed)
                result = 1;
System.out.println ("...")
```
mach { klammern bei den if und schleifen
nach System.out.println gehört ganz hinten natürlich ein ;
aber das muss dir doch eclipse sagen oder?

Wie habt ihr den gelernt, wie ihr einen Benutzer etwas eingeben lassen könnt?


```
// soll vom benutzer eine Eingabe über die Konsole fordern
        
    int myGuess=Integer.parseInt(args[0]);
                              
// damit will ich, dass das was der Benutzer, dann in die Konsole eingibt, genommen wird als myGuess
```
das hatten wir schon geklärt, das mit args[0] nix vom benutzer eingelesen wird...


----------



## BlackSalad (29. Okt 2010)

so, danke an euch nochmal.

Also ich habe mir das ganze jetzt nochmal alles angeschaut und glaube ich einbisschen was verstanden zu ahben 

also brauch ich jetzt, wenn ich mich nicht irre das hier nun um die Zahl über die tastatur einzulesen.


```
public static int read() throws IOException {
return Integer.parseInt(stdin.readLine().trim());
} 

//oder

public static double readDouble() throws IOException {
return Double.parseDouble(stdin.readLine().trim());
}
```


nun werd ich mich mal darin versuchen das ding in den code einzubauen. so, dass es auch funktioniert. Ich glaub zwar noch nicht dran, dass ich das irgednwann noch schaffe.. :noe:
aber man soll ja nicht vorzeitig aufgeben, auch wenn mir langsam echt danach ist..


----------



## ARadauer (29. Okt 2010)

ok ich klink mich aus... wen 3-4 leute helfen, verwirrt das nur


----------



## ARadauer (29. Okt 2010)

ich seh schon die nächste frage.

stdin cannot be resolved...


```
public static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
```

also


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

   public static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

   public static void main(String[] args) throws IOException {
      System.out.println("Eingabe: ");
      int i = read();
      System.out.println(":" + i);

   }

   public static int read() throws IOException {
      return Integer.parseInt(stdin.readLine().trim());
   }

   public static double readDouble() throws IOException {
      return Double.parseDouble(stdin.readLine().trim());
   }

}
```


----------



## BlackSalad (29. Okt 2010)

oh man  Bei allem was ich finde muss man irgendwie auch was an dem vorgegebenen ändern, was ich ja nicht darf. Hat gehießen, sobald man was am Rest ändert gibts automatisch 0 punkte.


----------



## BlackSalad (29. Okt 2010)

ARadauer hat gesagt.:


> ich seh schon die nächste frage.
> 
> stdin cannot be resolved...
> 
> ...



Gibt es keine Möglichkeit etwas einzulesen, wo ich nicht irgendwas außerhalb von TODO ändern muss?


----------



## ARadauer (29. Okt 2010)

> Gibt es keine Möglichkeit etwas einzulesen, wo ich nicht irgendwas außerhalb von TODO ändern muss?



ja klar, du ließt nicht über die read sondern machst es die beiden Dinge. Reader initailiseren und lesen in deinem todo:


BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
int wert = Integer.parseInt(stdin.readLine().trim());


----------



## BlackSalad (29. Okt 2010)

das geht? 

okay. Dann werd ich das mal versuchen einzubauen. Danke.

also ich muss jetzt zur uni, kann dann erst heute abend nochmal posten. Hoffentlich komme ich weiter :/

Danke nochmal vielmals!


----------



## slawaweis (29. Okt 2010)

Bin ich hier im falschen Film gelandet?

@BlackSalad
Du hättest Dir die letzten 3 Seiten komplett sparen können, wenn Du entweder deine Aufgabenstellung durchgelesen oder den Rahmencode (ohne den Namen des Dozenten) in den ersten Post geschrieben hättest, anstatt es nur 2 Usern per PN zu senden. Wozu denkst Du ist dieses *piep* Stück Code in deiner Aufgabe drin:


```
/**
* Helper infrastructure, used to read human input.
*/
protected int inputInt() {
try {
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
while(true) {
System.out.print("Tell me your guess: ");
String inputString = reader.readLine();
if (inputString == null) throw new java.io.EOFException();
try {
return Integer.parseInt(inputString);
} catch (NumberFormatException e) {
System.out.println("- Your input (\"" + inputString + "\") is not a valid number! Try again...");
}
}
} catch (Throwable throwable) {
System.err.println();
System.err.println("- Sorry, it just doesn't work here with you... I'll shut down now!");
System.exit(1);
return 0;
}
```

ist auch übrigens die Erklärung, wieso in der Aufgabenstellung steht "nur an den TODO-Stellen was ändern".

Slawa


----------



## BlackSalad (29. Okt 2010)

okay, habs grad mal ausprobiert...

aber so wie das normal funktioniert, wenn mans an den anfang schreibt, geht das hier jetzt aber nicht..?! 

die sau dummen fragen tun mir leid, aber ich verstehs nicht....ich habe immer alles nur mit "args" gemacht und bin jetzt total aufgeschmissen, dass das hie rnicht geht usw. 


wie krieg ich jetzt das import java.io.BufferedReader;
import java.io.InputStreamReader; da rein, dass es funktioniert, weil innerhalb von TODO willl es das nicht nehmen, sondern nur, wenn ich etwas oben an den dateianfang schreib.. =(

ich muss jetzt auch los..


----------



## BlackSalad (29. Okt 2010)

slawaweis hat gesagt.:


> Bin ich hier im falschen Film gelandet?
> 
> @BlackSalad
> Du hättest Dir die letzten 3 Seiten komplett sparen können, wenn Du entweder deine Aufgabenstellung durchgelesen oder den Rahmencode (ohne den Namen des Dozenten) in den ersten Post geschrieben hättest, anstatt es nur 2 Usern per PN zu senden. Wozu denkst Du ist dieses *piep* Stück Code in deiner Aufgabe drin:
> ...





ja es tut mir leid, ich dachte, das wäre nicht wichtig.. 


und was mus sich jetzt weiter tun, damit das endlich funktioniert? :noe: ???:L


----------



## slawaweis (29. Okt 2010)

BlackSalad hat gesagt.:


> ja es tut mir leid, ich dachte, das wäre nicht wichtig..


sagten für die Maßeinheiten zuständigen Programmierer des 125 Millionen teuren Mars Climate Orbiter. Mein Gesicht sieht jetzt genauso aus wie mein Avatar, nur roter.



BlackSalad hat gesagt.:


> und was mus sich jetzt weiter tun, damit das endlich funktioniert? :noe: ???:L


1+1=

Slawa


----------



## mariusbopp (29. Okt 2010)

und hast dus geschafft?


----------



## timbeau (29. Okt 2010)

Sag mal was für ein Studium machst du? 

"Was muss ich jetzt ändern?"

Deine Arbeitseinstellung! Anstatt 2 Tage im Forum rumfragen ohne das es für dich irgendeinen Wert hat, weil du es nicht verstehst sondern nur Punkte haben willst, die Nase in Tutorials stecken und dies durcharbeiten bis du es verstanden hast. 

Gegenbeispiel: wie gut kann sich ein Deutscher in England verständigen der 10 Sätze auswendig kann?

@Slawaweis: Danke!

Bye


----------



## mariusbopp (29. Okt 2010)

5 seiten für so ein triviales problem...
ich mein ich fange selber erst an und bin über jede hilfe dankbar aber dann muss sich auch selber mal hinsetzen und was machen es wird hier 5 ma auf dem selben herrum geritten und das is bisschen vill meiner meinung nach mit ein bisschen eigeninitiative könnte man die eingabe in java locker hinbekommen selbst als anfänger... für hilfestellungen sind wir gern da aber du musst auch was dafür tuen!!
----->:rtfm:


----------



## ARadauer (29. Okt 2010)

slawaweis hat gesagt.:


> sagten für die Maßeinheiten zuständigen Programmierer des 125 Millionen teuren Mars Climate Orbiter.



:lol::lol::lol::lol: geil!


Dazu muss man wissen, das das wirklich mal passiert ist...


----------



## sebi680 (29. Okt 2010)

ARadauer hat gesagt.:


> :lol::lol::lol::lol: geil!
> 
> 
> Dazu muss man wissen, das das wirklich mal passiert ist...



Erinnert an die Ariane 5 und den int overflow 


@BlackSalad
Hab hier auch nochmal eine kleine Variante für dich.
Ist nicht direkt die Lösung für deine Aufgabe, weil du ja nur an den TODOs was ändern sollst, aber ich habe sehr viel kommentiert, um dir vielleicht einfach nochmal die Funktionsweise etwas besser zu vermitteln.

Ich weiß ja, wie´s mir am Anfang ging 



```
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;


public class GuessingGame{
	int zufallszahl;	// int Variable für die Zufallszahl
	int eingabe;		// int Variable für die Eingabe des Nutzers
	int zaehler;		// int Variable, die die Versuche mitzählt
	boolean erraten = false;		// Boolean/Wahrheitsvariable für die Schleifenwiederholung, solange 
								// noch nicht die richtige Zahl eingegeben wurde.
	
	public static void main (String[] args){     //Main-Methode: Hier beginnt dein Programm
 		new GuessingGame();                   // Ruft den Konstruktor auf.
	}
	
	public GuessingGame(){		// Konstruktor der Klasse.
		zaehler = 1;			// Zählervariable wird mit 1 initialisiert.
		
		generateRandomNum();	// Ruft die Methode "generateRandomNum()" auf.
		System.out.println("Bitte geben Sie ihre Zahl ein: ");
		
		while(!erraten){  		  /* Solange 'erraten' auf false steht(was es ist, bis die richtige Zahl eingegeben wird,
		 				   * solange soll diese Schleife wiederholt ausgeführt werden.
		 				   * Die Schreibweise "!erraten" ist äquivalent zur Schreibweise "erraten == false". 
		 				   */
			
				readInput(); 	// Ruft die Methode "readInput()" auf, um wiederholt die Nutzereingabe einzulesen.
				compare();	 	// Vergleicht in jedem Schleifendurchgang die neue Eingabe des Nutzers mit der Zufallszahl.
		}
	}
	
	public void generateRandomNum(){
		System.out.println("***Zufallszahl wurde erzeugt***");
		Random ran = new Random();
		zufallszahl = ran.nextInt(101);/* Hier wird die Zufallszahl erzeugt und in der globalen int Variable   
 						 	 * "zufallsszahl" gespeichert. '101', weil der höchste Wert der übergebenen Zahl exklusiv 
						 	 * behandelt wird. "ran.nextInt(100)" würde also nur eine Zufallszahl zwischen 0 und 99 
   							 * ermitteln.
                                                         */
		 
	}
	
	public void readInput(){ 	/* Hier wird die Eingabe des Nutzers eingelesen.
						 * Schenke dem "try/catch" garkeine Beachtung, auch die Art und Weise,
						 * wie die Eingabe eingelesen wird, ist jetzt nicht so wichtig, das muss man nach
						 * 1, 2 Wochen Java noch nicht verstehen.
						 */
		try{
			eingabe = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public void compare(){                /* Diese Methode vergleich immer die neu eingegebene Zahl des Nutzers mit der
							* Zufallszahl.
							* Bei jeder falschen Eingabe, wird ein Hinweis ausgegeben, ob die eingegebene
							* Zahl zu groß oder zu klein war. Außerdem wird der Zähler für die Versuche
							* immer um 1 hochgezählt.
							*/
		if (eingabe < zufallszahl){
			System.out.println("Ihre Zahl ist zu klein!");
			zaehler++; 		// Zähler wird um 1 erhöht. Äquivalent zu "zähler = zähler + 1" oder "zähler += 1"
		}
		else if (eingabe > zufallszahl){
			System.out.println("Ihre Zahl ist zu groß!");
			zaehler++;
		}
		else{
			System.out.println("Sie haben richtig geraten! :)\nSie benötigten dafür " + zaehler + " Versuche.");
			zaehler++;
			erraten = true;           /* "erraten" wird auf "true" gesetzt, sodass sich die Schleife weiter oben
							 * nicht mehr wiederholt.
							 */
		}
	}
}
```


----------



## BlackSalad (29. Okt 2010)

danke euch allen. Ich hab mir jetzt alles nochmal durchgelesen, von skript bis buch. Nur irgendwie finde ich nie eine richtige erklärung für den code. das "hintendran" versteh ich, aber der code ist für mich das größte rätsel der welt.

ich schau mir das was ihr geschrieben habt jetzt nochmal an.


----------



## BlackSalad (29. Okt 2010)

sebi680 hat gesagt.:


> Erinnert an die Ariane 5 und den int overflow
> 
> 
> @BlackSalad
> ...



Danke für die tollen Kommentare, jetzt gibt der code mal zumindest ein wenig Sinn für mich. 
ich dachte, dass es viel weniger code braucht..


also im prinzip muss jetzt ja nur das ja nur so umgebaut werden , dass das import java.io.BufferedReader; import java.io.InputStreamReader; und
import java.util.Random; nicht mehr oben reingeschrieben werden muss. 

Aber in der Vorgabe von meinem Dozent steht ja auch schon sowas von BufferedReader und so.

Ich mus smirs jetzt nochmal anschauen, bin vorhin erst heimgekommen.


----------



## BlackSalad (29. Okt 2010)

aber mich irritiert, dass ich einmal ne binäre Suche machen soll und jetzt ist das ja doch wieder ganz anders.

Ich bin grad dabei die ganzen Sachen umzubenennen, so dass sie in meinen coderumpf passen. Klappt nur bedingt bis jett. Aber ich geb nicht auf. :noe:


----------



## timbeau (30. Okt 2010)

Schön, wenn du dir ein Buch und das Skript angeguckt hast wirst du ja verstehen was Klassen und Methoden sind. Eine der Grundvorraussetzungen! 

Und das Java auf bereits vorgefertigten Klassen besteht die du einbinden kannst. Eine dieser Klassen hat dein Prof geschrieben damit importiert ER den BufferedReader und DU nutzt die Methoden SEINER Klassen um in DEINEM Programm Eingaben einzulesen.


----------



## BlackSalad (30. Okt 2010)

timbeau hat gesagt.:


> Schön, wenn du dir ein Buch und das Skript angeguckt hast wirst du ja verstehen was Klassen und Methoden sind. Eine der Grundvorraussetzungen!
> 
> Und das Java auf bereits vorgefertigten Klassen besteht die du einbinden kannst. Eine dieser Klassen hat dein Prof geschrieben damit importiert ER den BufferedReader und DU nutzt die Methoden SEINER Klassen um in DEINEM Programm Eingaben einzulesen.





Ehrlich gesagt hats mri absolut nichts gebracht. ich verstehe immer noch nichts von Code.. kannste mir mal iregdnwas nennen , was mir code erklärt?


abgabe ist jetzt vorbei.. :noe: könnt ihr mir jetzt vielleicht wenigstens sagen wie es hätte müssen richtig aussehen,damit es funktioniert? 


sonst werde ich es nie verstehen..


----------



## Haave (30. Okt 2010)

BlackSalad hat gesagt.:


> Ehrlich gesagt hats mri absolut nichts gebracht. ich verstehe immer noch nichts von Code.. kannste mir mal iregdnwas nennen , was mir code erklärt?


http://www.java-forum.org/buecher-tutorials-links/220-liste-tutorials-ebooks.html
http://www.java-forum.org/buecher-tutorials-links/106367-gutes-javabuch-fuer-einsteiger.html
http://www.java-forum.org/buecher-tutorials-links/105976-buch-fuer-programmieranfaenger.html
http://www.java-forum.org/buecher-t...elchen-anfaengerbuechern-habt-angefangen.html


Hab jetzt nicht den ganzen Thread gelesen, dafür war es mir zu viel und zu durcheinander, aber so wie es aussieht, solltest du dringend ein Lehrbuch von vorn bis hinten durcharbeiten. Dieses Gefrickel hier bringt keinem was.


----------



## BlackSalad (30. Okt 2010)

danke, ich bin schon dabei, aber muss erst diese aufgaben lösen, sonst brauch ich erst gar nicht weiter lernen.. 

kannst du (oder auch jemand anders ) mal den datenmist korrigieren den ich da habe? ich verstehe nämlich nicht woran es hängt. wär echt lieb








```
/**
 * In this game, I will first choose a secret random number, and one of us (either you or me) must guess it iteratively... <br/>
 * All I will reveal for a guess is whether the guess is higher or lower than the secret random number in my mind.<br/>
 * You may use everything that is provided to you in this class, but<br/>
 * DO NOT CHANGE ANYTHING except for the bodies of the methods marked with "ToDo"!
 * 
 */
public class ChildrensGame {
	/**
	 * The smallest possible number I may choose.
	 */
	protected final int MIN;

	/**
	 * The greatest possible number I may think of.
	 */
	protected final int MAX;

	/**
	 * Just for statistics...<br/>
	 */
	protected long numberOfGuesses = 0;

	/**
	 * The secret number between {@link #MIN} and {@link #MAX} (both inclusive) to be guessed.
	 */
	protected final int toBeGuessed;

	/**
	 * Let the games begin (here)!<br/>
	 * There is no need for you to change this method in any way (but you should test your code with different min/max-values...)!<br/>
	 * The secret number to be guessed is chosen between {@link #MIN} and {@link #MAX} (both inclusive).<br/>
	 * @see <a href="http://download-llnw.oracle.com/javase/6/docs/api/java/lang/Math.html#random()">Math.random()</a>
	 * @param args If you don't provide one (whatever), I'll play by myself - otherwise you can puzzle it out...
	 */
	public static void main(String[] args) {
		int min = 1;
		int max = 100;
		int toBeGuessed = min + ((int)(Math.random() * (max - min + 1)));
		ChildrensGame childrensGame = new ChildrensGame(min, max, toBeGuessed);
		if (args.length > 0) {
			childrensGame.playWithYou();
		} else {
			childrensGame.playByMyself();
		}
	}

	/**
	 * Initialises a new game.<br/>
	 */
	protected ChildrensGame(int min, int max, int toBeGuessed) {
		this.MIN = min;
		this.MAX = max;
		this.toBeGuessed = toBeGuessed;
	}

	/**
	 * Checks whether {@code myGuess} is less than, equal or greater than the real secret number {@link #toBeGuessed} and returns the "encoded result" correspondingly.
	 * @param myGuess This is the guess to be evaluated.
	 * @return
	 * <table>
	 * <tr><td>-1</td><td>: if {@code myGuess} is less than the secret value {@link #toBeGuessed}.</td></tr>
	 * <tr><td>0</td><td>: if {@code myGuess} is exactly the the secret value <i>(yeah!)</i></td></tr>
	 * <tr><td>1</td><td>: if {@code myGuess} is greater than the secret value.</td></tr>
	 * </table>
	 */
	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;
	}

	/**
	 * I'll choose the secret number {@link #toBeGuessed} and a human player must try to guess it.
	 */
	protected void playWithYou() {{


		    int toBeGuessed;    
		    int myGuess;        
		    int numberOfGuesses;       
		    boolean checkGuess = false;}     
		   
		   

		    public playWithYou()   
		      numberOfGuesses = 1;           
		        
		        generateRandomNum();    
		        System.out.println("Please tell mir your Guess "); 
		    
		    
		        
		        
		        while(checkGuess(0)!=toBeGuessed){          
	              
		            
		                readInput();    
		                compare();     
		        
		        }}
		    
		    private void compare() {
		
		
	}

			private void readInput() {
		
		
	}

			public void generateRandomNum(){
		        System.out.println("***Zufallszahl wurde erzeugt***");
		        Random ran = new Random();
		        toBeGuessed = ran.nextInt(101);
		         
		    
		    
		    public void readInput();{   
		                         
		        try{
	
		 myGuess = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
		        }catch(Exception e){
		            e.printStackTrace();
		        }
		    }
		    
		    public void compare();               
		    
		        if (myGuess < toBeGuessed){
		            System.out.println("The number is too small");
		            numberOfGuesses++;      
		        }
		        else if (myGuess > toBeGuessed){
		            System.out.println("Your guess is to high");
		            numberOfGuesses++;
		        }
		        else{
		            System.out.println("Perfect. The number of Guesses is " + numberOfGuesses );
		            numberOfGuesses++;
		            checkGuess = true;           

		        }}}
		    
		
	

	/**
	 * I'll just pretend that I don't know the value {@link #toBeGuessed} and puzzle myself over it just like a human player.<br/>
	 * I will do my best to find the secret number within as few steps as possible!
	 */
	protected void playByMyself(){

	}
			//  TODO
	/**
	 * Helper infrastructure, used to read human input.
	 */
	protected int inputInt() {
		try {
			java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
			while(true) {
				System.out.print("Tell me your guess: ");
				String inputString = reader.readLine();
				if (inputString == null) throw new java.io.EOFException();
				try {
					return Integer.parseInt(inputString);
				} catch (NumberFormatException e) {
					System.out.println("- Your input (\"" + inputString + "\") is not a valid number! Try again...");
				}
			}
		} catch (Throwable throwable) {
			System.err.println();
			System.err.println("- Sorry, it just doesn't work here with you... I'll shut down now!");
			System.exit(1);
			return 0;
		}
	}
}
```


----------



## slawaweis (30. Okt 2010)

ich beende dann diese unendliche Geschichte. So sieht eine mögliche funktionierende Lösung aus, wobei man nur die TODO-Stellen verändert. Du musst jetzt nur noch schaffen, es per Copy & Paste in deinen Quelltext einzufügen und das Programm auszuführen.


```
protected int checkGuess(int myGuess)
  {
  int result = 0;

  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;
  }

 protected void playWithYou()
  {
  while(true)
       {
       int myGuess = inputInt();

       int result = checkGuess(myGuess);

       if(result == 0)
         {
         break;
         }
       }
  }

 protected void playByMyself()
  {
  int min = MIN;
  int max = MAX;

  while(true)
       {
       int myGuess = min + ((max - min + 1) / 2);

       int result = checkGuess(myGuess);

       if(result == -1)
         {
         min = myGuess;
         }
       else if(result == 1)
         {
         max = myGuess;
         }
       else
         {
         break;
         }
       }
  }
```



BlackSalad hat gesagt.:


> sonst werde ich es nie verstehen..


Dir fehlen die einfachsten Grundlagen. Wie man ein Programm startet, wie Parameter an ein Programm übergeben werden, was eine Funktion ist, was ein Block ist, wie ein Schleife funktioniert, wie if else funktioniert, was Klassenvariablen sind usw. Ich kann es mir vorstellen, dass man so eine Aufgabe schon nach 4 Stunden Vorlesung und 2 Stunden Tutorium bekommen kann. Wenn bei euch eine Vorlesung ausgefallen ist, dann muss es nachgeholt werden, bevor ihr so eine Aufgabe bekommt. Aber auch mit Büchern oder einfach Google konnte man es alles herausfinden, denn es sind wirklich die ersten Schritte, vor allem da alles komplizierte bereits in Rahmencode vorhanden war und Du nur die Sache wie in diesem Post zu schreiben hättest. Dazu braucht man auch einwenig Ehrgeiz. Das letzte vermisste ich bei Dir komplett. Du hast ständig "jetzt verstehe ich mehr" oder "jetzt wird es klarer" geschrieben, aber man konnte deinen Posts es direkt ansehen, dass es nicht der Fall war. Du warst höfflich und freundlich, aber letztendlich hast Du nur darauf gewartet, dass Dir jemand die ganze Lösung schreibt. Nach 5 Seiten und 3 Tagen hast Du es geschafft, Gratulation. Denke aber nicht, dass es auch weiterhin so funktioniert. Google mit den passenden Stichwörtern ist dein bester Freund. Ich habe es auch so gelernt, jedenfalls seit es Google gibt 

Slawa


----------



## timbeau (30. Okt 2010)

Was studierst du eigentlich? Ich nehme mal an sowas wie Wirtschaftsinfo? ODer noch weiter von Informatik entfernt? Also musst du Java lernen oder nur einen Kurs paar Aufgaben abgeben?


----------



## BlackSalad (30. Okt 2010)

jep winf


----------

