Schere, Stein, Papier

suzerl

Mitglied
Hallo Freunde, (wuhu mein erster Post)
wir haben derzeit ein kleines Schulprojekt. Leider blicke ich in dem Thema nicht ganz durch.
Folgende Aufgabenstellung:
Erstellen Sie ein einfaches „Schnick-Schnack-Schnuck“-Spiel (Schere, Papier, Stein). Ihre Antworten sollen über die Tastatur ausgelesen werden. ( r=Stein, p=Papier, s=Schere.)

Folgende Hilfestellungen wurden uns noch dazu bereit gestellt:
Folgende Routine liest eine Zeile von der Tastatur ein und liefert das erste Zeichen zurück:
Java:
public static int readChar() throws Exception {
        int myChar = System.in.read();
        while (System.in.read() != '\n');
        return myChar;
    }
Aufgerufen wird die Routine wie folgt:
Java:
int myChar = <NameIhrerKlasse>.readChar();
Auf die Taste „B“ können Sie z.B. so abfragen:
Java:
if (myChar == 'b') { ... }

Das ganze läuft dann über einen Zufallsgenerator, so dass ich quasi gegen den Computer spiele.

Im Folgenden nun mein Code-Ansatz... mit dem ich aber leider einige Fehlermeldungen bekomme... Die zum Teil für mich auch etwas unverständlich sind. Ich hoffe ihr könnt mir da ein wenig weiterhelfen, damit mich noch weiter in die Materie vertiefen kann.

Java:
class SSP10
	public static void main(String[] args)  	{
	
	public static int readChar() throws Exception { 
		int myChar = System.in.read(); 
		while (System.in.read() != '\n'); 
		return myChar		
			
			/*int s =  1; 
			int p =  2;
			int r =  3; 
			int pcwahl; 
			int spielerwahl;*/ 				
					
					intMyChar = SSP10.readChar();
					pcwahl = (int) (Math.random()*3 + 1); 
			
			
									//Spieler wählt Schere
			 							if (myChar == 1){
			 
									//Computer wählt Schere
										if (pcwahl == 1) {
										System.out.println("Unentschieden"); }
				
									//Computer wählt Papier
										if (pcwahl == 2) {
										System.out.println ("Du hast gewonnen"); }
				
						
									//Computer wählt Stein 
										if (pcwahl == 3) {
										System.out.println ("Du hast verloren");} 
				
		}		
			
									//Spieler wählt Papier 
										if (myChar == 2); {
			
			
									//Computer wählt Papier
										if (pcwahl == 2); {
										System.out.println ("Unentschieden");}
				
									//Computer wählt Stein
										if (pcwahl == 3); {
										System.out.println ("Du hast gewonnen");}
				
									//Computer wählt Schere
										if (pcwahl == 1); { 
										System.out.println ("Du hast verloren");}
				
		}	
									//Spieler wählt Stein
										if (myChar == 3) { 
			
									//Computer wählt Stein
										if (pcwahl) == 3;
										{System.out.println ("Unentschieden");} 
				
									//Computer wählt Schere
										if (pcwahl) == 1; {
										System.out.println ("Du hast gewonnen");} 
				
									//Computer wählt Papier
										if (pcwahl) == 2; {
										System.out.println ("Du hast verloren");}
					
			
		}
	}

}
}
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
[JAVA=1]class {...}[/code] Klammern vergessen
[JAVA=15]
int MyChar = (int)readChar();
int pcwahl = (int) (Math.random()+ 1);[/code]
[JAVA=38] if (myChar == 2);[/code] ohne Semikolon
[JAVA=58]if (pcwahl) == 3;[/code] :autsch:
 

suzerl

Mitglied
so bekomme vom compiler nur noch einen fehler ausgegeben der für mich jedoch etwas unverständlich ist.
hier mal mein code:

Java:
 class SSP10	
{	
	public static int readChar() throws Exception { 
		int myChar = System.in.read(); 
		while (System.in.read() != '\n'); 
		return myChar;		
	
			//Variablen 
			int s = 1; 
			int p = 2;
			int r = 3;
			
			//Einführungstext							
				System.out.println("Lass uns ein Spiel spielen!");
				System.out.println("Treffe deine Wahl!");
					int myChar = (int)readChar(); //Fehler myChar ist schon in readChar definiert?
					int pcwahl = (int) (Math.random()*3 + 1); 
			
									//Regeln: 
			
									//Spieler wählt Schere
			 							if (myChar == 's'){
			 				
									//Computer wählt Schere
										if (pcwahl == 's') {
										System.out.println("Unentschieden"); }
							
									//Computer wählt Papier
										if (pcwahl == 'p') {
										System.out.println ("Du hast gewonnen"); }
				
							
									//Computer wählt Stein 
										if (pcwahl == 'r') {
										System.out.println ("Du hast verloren");} 
				
						
			
									//Spieler wählt Papier 
										if (myChar == 'p') {
			
			
									//Computer wählt Papier
										if (pcwahl == 'p') {
										System.out.println ("Unentschieden");}
				
									//Computer wählt Stein
										if (pcwahl == 'r') {
										System.out.println ("Du hast gewonnen");}
				
									//Computer wählt Schere
										if (pcwahl == 's') { 
										System.out.println ("Du hast verloren");}
				
			
									//Spieler wählt Stein
										if (myChar == 'r') { 
			
									//Computer wählt Stein
										if (pcwahl == 'r')
										{System.out.println ("Unentschieden");} 
				
									//Computer wählt Schere
										if (pcwahl == 's') {
										System.out.println ("Du hast gewonnen");} 
				
									//Computer wählt Papier
										if (pcwahl == 'p') {
										System.out.println ("Du hast verloren");}
					
			
		}
	
}


}
		return 0; 
}
}

In Zeile 16 spuckt der compiler mir dann folgende Fehlermeldung aus: ariable myChar is already defined in method readChar(). Weiss leider nicht so ganz was ich mit der Meldung anfangen soll ???:L
 
G

Gast2

Gast
du vereinbarst myChar 2x
[JAVA=4] int myChar = System.in.read(); [/code]
[JAVA=16] int myChar = (int)readChar();[/code]

du müsstest einfach eine umbenennen.
 

suzerl

Mitglied
hilft nicht wirklich :/ habe das myChar zu Char mal umbenennt. Der Compiler spuckt mir nun die Fehlermeldung unreachable Statement in der Zeile 15 aus.
 
S

SlaterB

Gast
die readChar()-Methode ist doch nach drei Zeilen, nach dem return zu Ende, da gehört eine geschweifte Klammer hin,
anderer Code muss in eine neue Methode, z.B. der main-Methode stehen usw..

Tipp für den Anfang:
möglichst wenig Code, erstmal Grundstrukturen einbauen, leere Methoden

Java:
 class SSP10    
{   
   public static int readChar() {
     return 0;
  }

   public static void main(String[] args)      {
        // in einer nicht-public-Klasse generell fraglich
   }

}
kompiliert? immerhin ein Anfang

danach Zeile für Zeile Code einfügen, zwischendurch auch laufen lassen,
ein altbekanntes
> System.out.println("Hello World");
welches tatsächlich zu einer Ausgabe führt, also Programm kompiliert und läuft, ist schon viel viel Wert,
besser als hunderte Codezeilen ohne Struktur durcheinanderzuwirbeln
 

Michael...

Top Contributor
Die Art einzurücken ist ganz schon merkwürdig! In einem normalen Ablauf einzurücken ist nicht die übliche Art und macht m.M. auch keinen Sinn. Dagegen sollte man bei Verschachtelten if Abfrage o.ä. einrücken, damit man die Zusammenhänge und Abschnitte besser erkennen kann.
Einrückungen dienen dazu den Code übersichtlicher zu gestalten und sollten nicht einfach wahllos, weil man "gerade man Lust hat" eingesetzt werden.

Zum Problem. Ursprünglicher Gedanke mit der Hilfestellung
Code:
public static int readChar()
war es vermutlich diese Methode als Hilfsmethode in Deinem Ablauf zu nutzen und nicht diese Methode aufzublasen und mit eigenem Code zu erweitern. Ist ja auch nicht unbedingt ein leuchtend wenn man eine Methode
Code:
readChar
hat, die so nebenbei noch ein Schere-Stein-Papier-Spiel durchführt.

Und wenn Dein Code funktionieren würde, würde es zu einer Endlosschleife kommen, da die Methode in Zeile 16 sich selbst aufruft.

Ergo: Zurück zum Start klein anfangen. Eine Methode schreiben, die zufallsgesteuert die Wahl des Computers ausführt. Eine Methode schreiben, die zwei Symbole miteinander vergleicht und zurückgibt ob oder wer gewonnen hat.
Eine Spielschleife die (u.a.) mittels readChar die Wahl des Anwenders einliest, anschließend die Computer Methode und darauf die Vergleichsmethode aufruft, um dann anschließend auszugeben wer gewonnen hat.
 
G

Gast2

Gast
Ich kann meine Vorrednern nur recht geben.
nach
Code:
return
endet eine Methode standartgemäß (da sie ja dann einen Wert zurückgibt, mehr soll sie ja ursprünglich nicht tun)
Den ganzen Rest musst du in die main-Methode schreiben, das wird dann bei Programm-Start ausgeführt!

EDIT: Was soll denn dein
Code:
while
überhaupt machen?
 

Ähnliche Java Themen

Neue Themen


Oben