Java Spiel Fehler im Code?

5 Antworten

1) Deine Imports sind falsch, das Sternchen fehlt, wenn du alle Packages inkludieren möchtest.

import java.awt.*;
import java.applet.*;

2) Wieso erbst du eigentlich von der Klasse Applet? Falls dies dafür ist, um die Anwendung in eine Webseite einzubinden, dann solltest du wissen, dass diese Technik aus Sicherheitsgründen schon lange nicht mehr unterstützt wird.

3) Du schließt den Scanner nach Benutzung nicht.

4) An welchem Punkt brichst du aus der Schleife wieder aus? Momentan ist es eine Endlosschleife.

5) Dein Logikfehler: Du liest ständig neue Werte ein. So kann ein Nutzer hier bspw.:

(input.nextInt() == 3 || input.nextInt() == 5)

zwei völlig unterschiedliche Werte eingeben.

6) Wieso verwendest du nicht immer die erstellten Variablen feuer, , etc. für alle Vergleiche?

7) Bei Unentschieden werden dennoch die anderen Vergleiche abgearbeitet, was an sich unsinnig ist. Du solltest den Iterationsschritt an diesem Punkt vorzeitig mit dem Schlüsselwort continue abbrechen. Das gilt auch für die anderen Vergleiche.

8) Fasse Deklaration und Definition zusammen, um an Zeilen zu sparen.

44

Hier einmal eine etwas aufgeräumtere Version:

import java.awt.*;
import java.applet.*;
import java.util.Scanner;

public class FightOfElements extends Applet {

	public static void main(String[] args) {
		
		String[] options = new String[] { "Beenden", "Feuer", "Wasser", "Luft", "Erde", "Elektro" };
		

		while (true) {
			System.out.println("Sie haben die Wahl");
			
			for (int i = 0; i < options.length; ++i) {
				System.out.println(i + " - " + options[i]);
			}
			System.out.println();
			
			Scanner input = new Scanner(System.in);
			int playerTurn;
			
			do {
				System.out.println("Bitte geben Sie einen erlaubten Zug ein:");
				playerTurn = input.nextInt();
			}
			while (playerTurn < 0 || playerTurn > 5);
			
			if (playerTurn == 0) {
				System.out.println("Spiel wird beendet.");
				break;
			}
			
			int pcTurn = (int) (Math.random() * 5) + 1;
			System.out.println("Zug vom Computer: " + options[pcTurn]);
			
			if (playerTurn == pcTurn) {
				System.out.println("Unentschieden!");
			}
			else if (gameOver(pcTurn, playerTurn)) {
				System.out.println("Sie haben verloren!");
			}
			else {
				System.out.println("Sie haben gewonnen!");
			}
			
			System.out.println();
		}		
	}
	
	private static boolean gameOver(int pcTurn, int playerTurn) {
		switch (pcTurn) {
			case 1:
				// fire
				return playerTurn == 3 || playerTurn == 5;
			case 2:
				// water
				return playerTurn == 1 || playerTurn == 4;			
			case 3:
				// air
				return playerTurn == 1 || playerTurn == 4;
			case 4:
				// earth
				return playerTurn == 1 || playerTurn == 3;
			default:	
			case 5:
				// electro
				return playerTurn == 1 || playerTurn == 3;
		}
	}
}
0
44
@regex9

Aja, der Scanner ist noch deplatziert.

Diese Zeile:

Scanner input = new Scanner(System.in);

kommt vor die while-Schleife und diese (neue) Zeile hinter diese:

input.close();

Wenn die Werte für die Elemente (Feuer, Wasser, etc.) unbedingt als Konstanten gesetzt werden sollen, dann verwende ein Enum.

0
44
@regex9

Eine Enumeration würde dann auch das String-Array oben ersetzen.

0

Du musst die Nutzereingabe einmal vor deinen Bedingungen mit

int eingabe = input.nextInt();

speichern und dann nur noch damit vergleichen, aktuell wird nämlich bei jedem Aufruf von input.nextInt() auf eine neue Zahl vom Nutzer gewartet

Ich habe dir den Code mal angepasst. Die Veränderungen habe ich in den Kommentaren ausführlich kommentiert. Jedenfalls funktioniert das Spiel jetzt, aber ob es korrekt ist, weiß ich nicht. Sollte die Logik falsch sein, müsstest du mir noch die Spielregeln erklären, damit ich dir weiterhelfen kann.

Hier die neue Java-Datei: https://hastebin.com/sitabafayu.java

44

Statt einzelne Konstanten würde sich eine Enumeration anbieten.

0
35
@regex9
Statt einzelne Konstanten würde sich eine Enumeration anbieten.

Ja, ich wollte jetzt aber auch nicht zu viel umbauen, da das für die Schule ist und dort Enumerationen wahrscheinlich nicht behandelt werden.

0
1

Danke! Wow vielen vielen Dank. Mehr Hilfe als ich erwartet habe. Es funktioniert so wie ich es mir vorgestellt habe. Wir durften leider nur Sachen benutzen die wir im Unterricht auch gelernt haben also konnte ich es mir nicht im Internet oder so angucken. Logik ist richtig. Ich bedanke mich nochmal recht herzlich.

0

Was stimmt an diesem Java-Code für einen Taschenrechner nicht?

Hallo, ich habe in Eclipse einen simplen Taschenrechner konzipiert, der zwei Double-Werte entweder addieren, subtrahieren, multiplizieren oder dividieren kann. Alles findet in der Console statt. Hierfür habe ich einen Scanner benutzt, der die Doubles abfragt und schließlich auch den Operatoren. Den gebe ich als String "+" oder "-" usw an. Durch eine if/else-Abfrage soll dann die richtige Rechnung ausgeführt werden. Leider gibt es Fehlermeldungen bei der Ausführung des Codes beim scannen des Operators. Hier der komplette Code:

import java.util.Scanner;

public class Rechner {

public static void main(String[] args) {
    double number1, number2, ergebnis = 0;
    String operator = "";
    Scanner scanner = new Scanner(System.in);
    
    System.out.println("Bitte Zahl eingeben:");
    number1=scanner.nextDouble();
    System.out.println("Bitte nächste Zahl eingeben:");
    number2=scanner.nextDouble();
    System.out.println("Bitte Operator eingeben:");
    operator=scanner.nextLine();
    
    if(operator=="+"){
        ergebnis=number1+number2;
        System.out.println("Das Ergebnis ist: " + ergebnis);
    }
    else if(operator=="-"){
        ergebnis=number1-number2;
        System.out.println("Das Ergebnis ist: " + ergebnis);
    }
    else if(operator=="*"){
        ergebnis=number1*number2;
        System.out.println("Das Ergebnis ist: " + ergebnis);
    }
    else if(operator=="/"){
        ergebnis=number1/number2;
        System.out.println("Das Ergebnis ist: " + ergebnis);
    }
    
scanner.close();

}

}

Weiß jemand woran das liegt?

...zur Frage

Java schere Stein papier? Hilfe?

Hey Leute,

bin ein Anfänger in Java und habe versucht Schere Stein Papier zu programmieren.

Nun gibt es dabei ein Fehler welchen ich nicht kenne. Kann mir jemand helfen

package Schresteinpapier;
import java.util.Scanner;
import java.util.Random;

public class scheresteinpapier {

public static void main(String[] args) {

String wahl_spieler; int wahl_pc; int Spieler_punkte = 0; int Pc_punkte = 0; int Runden = 0;

System.out.println("wähle Stein Schere oder Papier");

Random wuerfel = new Random();

while(Runden < 12) {

Scanner sc = new Scanner(System.in); wahl_spieler = sc.nextLine();

wahl_pc = 1 + wuerfel.nextInt(3);

//Schere if(wahl_spieler == "Schere" && wahl_pc == 1) { System.out.println("Unentschieden"); Runden++; } if(wahl_spieler == "Schere" && wahl_pc == 2) { System.out.println("Computer gewinnt"); Runden++; Pc_punkte++; } if(wahl_spieler == "Schere" && wahl_pc == 3) { System.out.println("Du gewinnst"); Runden++; Spieler_punkte++; }

//Stein if(wahl_spieler == "Stein" && wahl_pc == 2) { System.out.println("Unentschieden"); Runden++; } if(wahl_spieler == "Stein" && wahl_pc == 1) { System.out.println("Du gewinnst"); Runden++; Spieler_punkte++; } if(wahl_spieler == "Stein" && wahl_pc == 3) { System.out.println("Computer gewinnt"); Runden++; Pc_punkte++; }

//Papier if(wahl_spieler == "Papier" && wahl_pc == 3) { System.out.println("Unentschieden"); Runden++; } if(wahl_spieler == "Papier" && wahl_pc == 1) { System.out.println("Computer gewinnt"); Runden++; Pc_punkte++; } if(wahl_spieler == "Papier" && wahl_pc == 2) { System.out.println("Du gewinnst"); Runden++; Spieler_punkte++; }

}

System.out.println("Du hast " + Spieler_punkte + "Punkte"); System.out.println("Der computer hat " + Pc_punkte + "Punkte"); }

}

...zur Frage

Was möchtest Du wissen?