Schere ,Stein, Papier in Java?
Hallo, ich bin noch Anfänger in Java und kenne mich nicht besonders gut mit dem Programm aus. Wollte deshalb als Übung Schere, Stein Papier programmieren. Habe im Prinzip ein fertiges Programm, doch wenn ich die erste Antwort eingebe, wird mir eine Fehlermeldung angezeigt. Könnte mir jemand erklären was diese bedeutet und was ich an meinem Code verändern muss?
Code:
import java.util.Scanner;
public class scheresteinpapier {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int runden= 0;
int schere = 1;
int stein = 2;
int papier = 3;
int user=0;
int pc=0;
int userchoice;
double pcchoice;
while(runden<3)
{
System.out.print("Waehle Schere, Stein oder Papier.");
pcchoice = (int) (Math.random()*3);
userchoice = scanner.nextInt();
if (userchoice==schere)
{
if(pcchoice==schere)
{
System.out.print("Unentschieden!");
}
else if(pcchoice==stein){
System.out.print("Der PC hat diese Runde gewonnen!");
pc++;
}
else{
System.out.print("Du hast diese Runde gewonnen!");
user++;
}
}
else if (userchoice==stein)
{
if(pcchoice==schere)
{
System.out.print("Du hast diese Runde gewonnen!");
user++;
}
else if(pcchoice==stein){
System.out.print("Unentschieden!");
}
else{
System.out.print("Der PC hat diese Runde gewonnen!");
pc++;
}
}
else {
if(pcchoice==schere)
{
System.out.print("Der PC hat diese Runde gewonnen!");
pc++;
}
else if(pcchoice==stein){
System.out.print("Du hast diese Runde gewonnen!");
user++;
}
else{
System.out.print("Unentschieden!");
}
}
runden+=1;
}
if (pc==user)
{
System.out.print("Das Spiel ist unentschieden ausgangen!");
}
else if (pc<user){
System.out.print("Du hast das Spiel gewonnen!");
}
else{
System.out.print("Der Pc hast das Spiel gewonnen!");
}
}
}
Fehlermeldung:
ERROR!
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at scheresteinpapier.main(scheresteinpapier.java:21)
Den Beitrag einfach ignorieren, habe gerade selber meine Fahler gefunden
2 Antworten
Schade, dass du den Fehler schon gefunden hast. :) Ich hatte mich schon darauf gefreut, den Code von jemand anderem zu debuggen.
Könntest du erklären, was das Problem war? Das könnte sicher auch anderen helfen, falls sie mal vor einem ähnlichen Fehler stehen.
Falls du Java lernen möchtest, hätte ich einen Tipp: Erstelle ein Programm mit mehreren Klassen und Vererbung – zum Beispiel eine Klasse für ein Auto. So kannst du mehrere Autos mit unterschiedlichen Eigenschaften wie PS-Zahl usw. erzeugen.
Hier ist eine detaillierte Anleitung, (stammt von meinem Lehrer). Ich hoffe, sie hilft dir weiter. Wenn du magst, kann ich dir auch noch zusätzliche Materialien geben, einschließlich theoretischem Hintergrund.
Aufgabe 1: Klasse erstellen
Erstelle eine Klasse namens Auto die folgende Instanzvariablen hat: Marke und Baujahr. Erstelle dann einen Konstruktor, der diese beiden Variablen initialisiert, sowie Getter- und Setter-Methoden für diese Variablen.
Aufgabe 2: Objekte erstellen
Erstelle eine Klasse Main mit der main Methode. Erstelle dann zwei Objekte der Klasse Auto und gib deren Eigenschaften auf der Konsole aus (sysOut).
Aufgabe 3: Methoden
Füge der Klasse Auto eine Methode berechneAlter hinzu, die das Alter des Autos basierend auf dem aktuellen Jahr berechnet und zurückgibt. Wie du das aktuelle Jahr in java bekommst kannst du im Internet nachschauen.
Aufgabe 4: Überladen
Überlade den Konstruktor der Klasse Auto, um ein Auto ohne spezifisches Baujahr zu erstellen (nimm in diesem Fall das aktuelle Jahr).
Aufgabe 5: Statische Methoden und Variablen
Erstelle eine Variable autoZähler und eine Methode getAutoZähler in der Klasse Auto, um die Anzahl der erstellten Auto-Objekte zu zählen. Überprüfe auch ob der Zähler funktioniert!
Aufgabe 6: Verwendung von this
Überprüfe ob deine Setter-Methoden und der Konstruktor der Klasse Auto das Schlüsselwort this korrekt verwendet. Beschreibe in deinen Worten in einigen Sätzen was dieses Schlüsselwort macht und wozu man es braucht.
Aufgabe 7: Kapselung
Stelle sicher, dass die Instanzvariablen in der Klasse ordnungsgemäß gekapselt sind (um die Datenintegrität zu gewährleisten).
Aufgabe 8: Erweiterte Kapselung
Verbessern die Kapselung der Klasse Auto. Das kannst du machen indem du überprüfst, dass das Baujahr nicht in der Zukunft liegt. Auch die Marke sollte nicht null oder leer sein. Da wir Exception Handling noch nicht gemacht haben, verwende einen Default-Wert wenn eine falsche Eingebe gemacht wird.
Aufgabe 9: Kopieren
Modifiziere die Klasse Auto so, dass wenn beim Erstellen eines Autos ein Objekt vom Typ Auto übergeben wird, eine Kopie des Autos zurückgegeben wird. Kurz gesagt es soll möglich sein Auto Objekte zu Kopieren.
Mal als kleiner Hinweis, nachdem du die Lösung selbst gefunden hast, man kann Bedingungen auch zusammenfassen, spart jede Menge Schreibarbeit :)
if (userchoice==pcchoice) {
// unentschieden
} else if (((userchoice==schere) && (pcchoice==papier)) ||
((userchoice==stein) && (pcchoice==schere)) ||
((userchoice==papier) && (pcchoice==stein))) {
// user gewonnen
} else {
// pc gewonnen
}