Zahlenratenspiel

timbeau

Gesperrter Benutzer
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

Bekanntes Mitglied
die eingabe is z.b so zu realisieren:

Java:
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;);)
 

BlackSalad

Bekanntes Mitglied
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.

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.
 

timbeau

Gesperrter Benutzer
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

Bekanntes Mitglied
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

Top Contributor
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...
 

mariusbopp

Bekanntes Mitglied
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...
 

ARadauer

Top Contributor
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

Bekanntes Mitglied
also ich habe folgendes:


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

mariusbopp

Bekanntes Mitglied
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

Gesperrter Benutzer
Java:
// 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

Bekanntes Mitglied
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

Gesperrter Benutzer
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

Bekanntes Mitglied
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!!!

Java:
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

Bekanntes Mitglied
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.



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

mariusbopp

Bekanntes Mitglied
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

Bekanntes Mitglied
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!!!

Java:
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

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

Gesperrter Benutzer
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.
 

ARadauer

Top Contributor
Java:
 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?

Java:
// 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

Bekanntes Mitglied
so, danke an euch nochmal.

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

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

Java:
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

Top Contributor
ich seh schon die nächste frage.

stdin cannot be resolved...

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

also

Java:
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

Bekanntes Mitglied
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

Bekanntes Mitglied
ich seh schon die nächste frage.

stdin cannot be resolved...

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

also

Java:
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());
   }

}

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

ARadauer

Top Contributor
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

Bekanntes Mitglied
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

Bekanntes Mitglied
smilie_wut_027.gif
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:

Java:
/**
* 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

Bekanntes Mitglied
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

Bekanntes Mitglied
smilie_wut_027.gif
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:

Java:
/**
* 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



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
 

timbeau

Gesperrter Benutzer
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
 
Zuletzt bearbeitet:

mariusbopp

Bekanntes Mitglied
5 seiten für so ein triviales problem...:eek:
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:
 

sebi680

Mitglied
: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 ;)


Java:
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

Bekanntes Mitglied
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

Bekanntes Mitglied
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 ;)


Java:
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.
							 */
		}
	}
}

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

Bekanntes Mitglied
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

Gesperrter Benutzer
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

Bekanntes Mitglied
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

Top Contributor
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.
 

Neue Themen


Oben