Java von Kopf bis Fuß: Ratespiel-Problem

ilp

Mitglied
Hallo Forum,

ich habe den Code (Ratespiel, S. 38-40) aus dem Beispiel aus dem Buch Java von Kopf bis Fuß abgetippt.
Dafür nutze ich eclipse.

Leider komt statt der gewollten Ausgabe eine lange Fehlermeldeung. 🙁
Außerdem stehen 7 Fehlermeldungen neben dem Code:

--------
The public type Ratespiel must be defined in its own file

zahl cannot be resolved or is not a field

The public type Spieler must be defined in its own file

zahl cannot be resolved to a variable
--------

Einige davon zwei oder drei mal.

In der Anleitung steht auch was von drei .class Dateien, die man wahrscheinlich anlegen muss. Wie bekomme ich das in eclipse geregelt?



Wäre für eure Hilfe sehr dankbar.

Vielen Dank im Vorraus

ilp
 
Java:
public class Ratespiel {
	
	Spieler s1;
	Spieler s2;
	Spieler s3;
	
	
	
	public void starteSpiel() {
		
		s1 = new Spieler();
		s2 = new Spieler();
		s3 = new Spieler();


		int tipp1 = 0;
		int tipp2 = 0;
		int tipp3 = 0;
		
		
		boolean s1hatRecht = false;
		boolean s2hatRecht = false;
		boolean s3hatRecht = false;
		
		
		int zielZahl = (int) (Math.random() * 10);
		System.out.println("Ich denke mir eine Zahl zwischen 1 und 9 aus ...");
		
		
		
		while(true) {
			
			System.out.println("Die zu ratende Zahl ist " + zielZahl);
			
			s1.raten();
			s2.raten();
			s3.raten();
			
			tipp1 = s1.zahl;
			System.out.println("Spieler eins tippte " + tipp1);
			
			tipp2 = s2.zahl;
			System.out.println("Spieler zwei tippte " + tipp2);
			
			tipp3 = s3.zahl;
			System.out.println("Spieler drei tippte " + tipp3);
			
			
			
			if(tipp1 == zielZahl) {
				s1hatRecht = true;	
			}
			
			if(tipp2 == zielZahl) {
				s2hatRecht = true;
			}
			
			if(tipp3 == zielZahl) {
				s3hatRecht = true;
			}
			
			
			
			
			if(s1hatRecht || s2hatRecht || s3hatRecht) {
				
				System.out.println("Wir haben einen Gewinner!");
				System.out.println("Spieler eins hat richtig geraten? " + s1hatRecht);
				System.out.println("Spieler zwei hat richtig geraten? " + s2hatRecht);
				System.out.println("Spieler drei hat richtig geraten? " + s3hatRecht);
				System.out.println("Das Spiel ist aus.");
				break;
				
				
			} else {
				
				System.out.println("Die Spieler müssen es erneut versuchen.");
				
			}
			
		}
			
	}	

}




public class Spieler {
	int Zahl = 0;


public void raten() {
	zahl = (int) (Math.random() * 10);
	System.out.println("Ich tippe auf die Zahl: "+ zahl);
	}

}


public class SpielStarter {

	public static void main(String[] args) {
		
		Ratespiel spiel = new Ratespiel();
		spiel.starteSpiel();

		
			}
		}

Das ist der Quelltext.
 
Dann merk dir direkt mal,

class [X] {

}

gehört immer in [X].java
[X] ist hierbei ein platzhalter.

public class Ratespiel also in Ratespiel.java usw.
 
also muss ich "public class RateSpiel" und "public class Spieler" aus dem Code entfernen und jeweils als extra .java Datei abspeichern??
 
Vielen Dank nochmal, dachte erst funktioniert auch nicht, dann habe ich entdeckt, dass ich "int Zahl" geschrieben habe, diese Variable aber immer als "zahl" angesprochen :toll:
 
Hallo zusammen,

ich habe auch das Problem. Ich weiß einfach nicht was in welche Datei gehört und in dem Buch ist es auch nicht beschrieben.

Hat vielleicht jmd von euch dieses Ratespiel, so das es direkt funktioniert? Ich sitze seit 2 Stunden daran und komme nicht weiter und eine Hilfe im Buch gibt es auch nicht...so bringt mir das Ganze leider nichts.

Wäre super, wenn mir jemand mal dieses Code zur Verfügung stellen könnte bevor ich mich hier erschieße 🙂

Danke

Greg
 
Was meinst du jetzt?

Verschiedene Klassen mit den Namen X gehören in verschiedene Javadateinen mit den Namen X.Java, wie oben schonmal geschrieben wurde 😀.
 
Also hab selber das Buch hier liegen (aber habs schon durch 😛).
Falls du jetzt Eclipse verwendest mach bitte folgendes:
1. Du legst ein neues Projekt im Package Explorer (linke Spalte) an. Dafür gehst du oben auf File -> New -> Java Project. Dem gibts du z.B. den Namen "Ratespielprojekt".
2. Du legst in diesem Projekt im Unterordner "src" 3 neue Klassen an mit den Namen: "Spieler", "Ratespiel", "SpielStarter" (ohne die ").
3. In diese Klassen schreibst du dann den gewünschten Quelltext aus dem Buch hinein.
4. Jetzt noch alles compilieren und dann den Spielstarter ausführen bzw. Run drücken.

Jetzt sollte alles funktionieren. Beim Abtippen auf Tippfehler achten, ist mir auch ab und zu passiert.
Falls nicht, poste bitte deine Fehlermeldungen hier. Du brauchst keinen weiteren Quellcode außer den aus dem Buch!
 
Zuletzt bearbeitet:
Servus allerseits 🙂!

Ich habe zu dem, auf Seite eins, geposteten Quellcode eine Verständnisfrage.

Weshalb wird die while Schleife auf true gesetzt? Ich denke mal, dass sich das true auf
s1hatRecht = false; bezieht. Es wird jedoch erst innerhalb der Schleife eine Mehtode zum generieren der zu eratenden Zahlen aufgerufen, nämlich s1.raten();, diese sorgt ja dafür, dass automatisch eine Zahl generiert wird welche der verlangten entsprechenkann. Für mein Verständnis müsste die Schleife also so lange außer acht gelassen werden bis die Bedingung true eintritt, was ja theoretisch erst durch die while Schleife geschieht, wie aber soll beim Programmablauf jemals die while Schleife durchloffen werden ???:L?

Würde mich über eine Antwort freuen, da ich mich für Java interessiere, aber irgendwie nicht so recht warm mit der Programmiersprache werde.

Falls dieser Post an falscher Stelle steht, möchte ich mich entschuldigen. Ich bin bis jetzt nicht allzu oft in Foren tätig gewesen, sondern war/bin eher ein stummer Leser...
 
Zuletzt bearbeitet:
"while(true)" sind unsaubere Endlosschleifen, die eigentlich nicht verwendet werden sollten (von irgendwelchen Dummy Tests mal absgehen). Es ist immer besser eine richtige Abbruchbedingung zu definieren.
 
Wow, das ging ja wirklich schnell 🙂!

Vielen Dank für deine Antwort, so lernt man dazu.

Jedoch frage ich mich noch immer, wieso die Schleife durchlaufen wird? Oder ist es tatsächlich so,
dass die Schleife immer durchlaufen wird weil halt die Bedingung auf "true" gesetzt wurde, und dies keine wirkliche Testbedingung darstellt?

Nochmals vielen Dank Joose!
 

Zurück
Oben