Stein Schere Papier

Status
Nicht offen für weitere Antworten.
J

JackieO

Gast
Hallo zusammen,

habe gerade angefangen mit mit JAVA zu beschäftigen und meine ersten Bemühungen führten zu einem kleinen naiven "Stein, Schere, Papier" Spiel. Ist noch nicht ganz fertig, aber das Spielprinzip funktioniert, nur der Abbruch bei 0 ist noch nicht drin.
Meine Frage lautet nun, gibt es daran was zu verbessern und kann ich es kürzer kriegen? Vielen Dank schon mal im Vorraus und ich hoffe ich krieg ein paar Anregungen um besser zu werden.

Java:
public class Schnick {

    public static void main(String[] args) {
        System.out.println("Willkommen bei der Konsolenvariante von Schnick Schnack Schnuck. \n" +
                "Bitte geben Sie entweder 1 für Papier, 2 für Stein oder 3 für Schere ein! \n" +
                "Mit 0 wird das Spiel beendet!");
        int check = 0;
        int siegX = 0;
        int siegY = 0;
        String[] spielelemente = {"Papier",
                                  "Stein",
                                  "Schere"};
        while ((siegX != 3) && (siegY != 3)) {
            System.out.print("Papier(1), Stein(2) oder Schere(3): ");
            int x = Keyboard.readInt();
            System.out.println("Sie zeigen: " + spielelemente[x-1]);
            int y = (int) ((Math.random()*3)+1);
            System.out.println("Computer zeigt: " + spielelemente[y-1]);
            if (x >= 4 || x < 0) {
                System.out.println("Anscheinend hat Sie die Anleitung ueberfordert. \n" +
                        "Es gibt nur 1, 2 oder 3");
                continue;
            }
            else {
                if (x == y) {
                    System.out.println("Unentschieden");
                    check = check + 1;
                    continue;
                }
                if (((x == 2) && (y == 3)) || ((x == 3) && (y == 1)) || ((x == 1) && (y == 2))) {
                    System.out.println("Sieg für Spieler!");
                    System.out.println(spielelemente[x-1] + " gewinnt gegen " + spielelemente[y-1] + ".");
                    siegX = siegX + 1;
                }
                else {
                    System.out.println("Sieg für Computer!");
                    System.out.println(spielelemente[x-1] + " verliert gegen " + spielelemente[y-1] + ".");
                    siegY = siegY + 1;
                }

            }
                check = check + 1;
                
        }
        if (siegX == 3) {
            System.out.println("\nSie haben das Gesamtmatch gewonnen nach " + check + " Runden! Glückwunsch! \n");
        }
        else {
            System.out.println("\nSie haben leider verloren! \n");
        }
        System.out.println("Spieler: " + siegX);
        System.out.println("Computer: " + siegY);
        
    }

}
 

Meldanor

Bekanntes Mitglied
Was du "verbessern" könntest, wäre bei If und Else Anweisungen und Schleifen mit nur EINER Anweisung, wie z.B.
Code:
if (cool){
gewinnen();
}
Da kannst du die {} weglassen, aber ist auch "Geschmackssache". Manche finden, dass man mit {} einen besseren überblick bei Anweisungen hat, ich finde es sieht hübscher aus, wenn es weniger {} sind als man braucht ^^
(das gilt aber nur für
for
if
else
else if
while
)
und nicht für Klassen und Methoden.

Auch könntest du
Java:
int y = Math.random();
mit folgendem ersetzen:
Java:
Random random = new Random();
int y = random.nextInt(3);

Auch solltest du Variablen, die du in Schleifen deklarierst , wie int y und int x , immer außerhalb der Schleife deklarieren und in der Schleife nur neu belegen.
Also statt
Java:
for(int i = 0 ; i < 100 ; ++i)
int x = i;
[code=Java]
int x = 0;
for(int i = 0 ; i < 100 ; ++i)
x = i;
[/code]

Auch kannst du
Java:
check = check + 1;

mit
Java:
++ckeck;
abkürzen

Aber dass sind natürlich nur Feinheiten ^^
 

Marco13

Top Contributor
Was du "verbessern" könntest, wäre bei If und Else Anweisungen und Schleifen mit nur EINER Anweisung, wie z.B.
Code:
if (cool){
gewinnen();
}
Darüber kann man zwar streiten, aber wenn man die Klammern setzt, ist es weniger Fehleranfällig - auch wenn durch intelligente IDEs dieses Problem nicht mehr so akut ist. Ich finde, man sollte die stehen lassen.

Auch solltest du Variablen, die du in Schleifen deklarierst , wie int y und int x , immer außerhalb der Schleife deklarieren

DAS aber nun nicht: Es ist gute und gängige Praxis, den Gültigkeitsbereich von Variablen so klein wie möglich zu halten. Wenn man eine Variable NUR IN einer Schleife braucht, dann sollte sie auch NUR IN der Schleife "existieren", und nicht davor und nicht dahinter. Auch in Anlehung an das 'if': Dieser Grundgedanke, dass mit den { Klammern } Blöcke eingeschlossen werden, die irgendwie eine "Einheit" bilden, hat schon seinen Sinn ;)
 

Feld

Mitglied
und ich finde es überhaupt super schlechte Angewohnheit die Klammern in der gleichen Zeile zu setzen

Java:
if ( cool )
{
	gewonnen( );
}

sieht doch viel besser und leserlicher aus als

Java:
if (cool) {
	gewonnen();
}

wobei noch kein leerzeichen zwischen den klammern zu setzen bringt den letzen Strich an uncoolnes an. ==> ( cool ) cooler als (cool) :noe:

Einer hat vorgemacht mit Klammer in der gleichen Zeile und alle machen es dem nach
 
M

MiDniGG

Gast
Einer hat vorgemacht mit Klammer in der gleichen Zeile und alle machen es dem nach

Naja, da der "eine" Sun war macht das durchaus Sinn. Für was gibt's sonst die Code-Conventions?! :bae:

7.4 if, if-else, if-else-if-else Statements
The if-else class of statements should have the following form:
Java:
if (condition) {
     statements;
}
if (condition) {
     statements;
} else {
     statements;
}
if (condition) {
     statements;
} else if (condition) {
     statements;
} else if (condition) {
     statements;
}

Note: if statements always use braces {}. Avoid the following error-prone form:
Java:
if (condition) //AVOID! THIS OMITS THE BRACES {}!
     statement;


Aber wie schon gesagt:
Jedem das Seine! Ich bin raus! :hihi:
 

Marco13

Top Contributor
Ja, ich hatte schon befürchtet, dass so eine unscheinbare Frage nach Verbesserungsmöglichkeiten spätestens wenn es um die Einrückung und die Platzierung der Klammern geht eine Diskussion loslösen wird, die ewig gehen könnte, aber das macht ja keinen Sinn.
In bezug auf die Frage, ob die geschweifte Klammer hier oder da hin kommt, würde ich sagen: Das macht man so, wie es den eigenen Vorlieben (oder den Code Conventions der Firma) entspricht, und wenn's nicht passt, läßt man einen Formatter drüberlaufen (und damit ist die Diskussion für mich beendet).
In bezug auf die Frage, OB man bei einzeiligen ifs die Klammern setzen sollte gibt es ja klare Empfehlungen, Grunde und die allgemeine Tendenz dazu: Ja, das sollte man.

Aber ich vermute, dass all das nicht mit den erfragten "Verbesserungsmöglichkeiten" gemeint war... Ich nehme an, es ging um nicht-whitespace-Characters :D
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben