2017-11-08 12 views
0

Ich habe einen Bachelor-Abschluss in einem Informatik-verwandten Bereich begonnen, also sollte ich programmieren und alles ist ziemlich neu für mich, aber ich denke, wir haben alle von Null angefangen.Warum funktioniert meine Schleife in meinem Münzwurf-Spiel nicht richtig?

Ich habe es schwer, meinen Code so zu gestalten, wie er sollte. Ich muss ein Flip-Coin-Spiel programmieren ... Zufallszahlen (gerade/ungerade) erstellen, benutze Benutzereingaben und dann sollte der Spieler so lange spielen, wie er will, deshalb habe ich eine while-Schleife erstellt und es scheint nicht Eigentum bearbeiten. Ich habe bereits versucht, meinen Code hinein zu legen und es hat auch nicht funktioniert. Meine IDE teilt mir auch mit, dass ich nie den Wert verwenden werde, der meinem scanner.nextInt(), dem UserEingabe, zugewiesen wurde. Ich bin mir ziemlich sicher, dass etwas für viele von euch ziemlich einfach zu lösen ist, aber ich habe ein bisschen Probleme. Vielen Dank im Voraus für die Hilfe.

Code: Hauptklasse

class CoinObject { 

    public static void main(String[] args) { 

    Coin coinObject = new Coin(); 
    coinObject.throwCoin(); 
    } 
} 

Zweite Klasse:

import java.util.Scanner; 
public class Coin { 

    public void throwCoin(){ 

     Scanner scanner = new Scanner(System.in); 
     System.out.println("Erraten sie, ob Kopf oder Zahl oben liegt:"); 
     System.out.println("Kopf=0"); 
     System.out.println("Zahl=1"); 
     int UserEingabe = scanner.nextInt(); 
     int randomNumber = (int) Math.random(); 

     String yes = "yes"; 
     String no = "no"; 
     int spiele = 1; 
     int victories = 1; 
     String play = scanner.next(); 

// if the input = the random #, cool!, otherwise false :) 
      if (UserEingabe == randomNumber){ 
       System.out.println("Sie haben richtig geraten"); 
       System.out.println("Moechten Sie weiter spielen (yes/no)"); 
       play = scanner.next(); 

      } else { 

       System.out.println("Sie haben falsch geraten"); 
       System.out.println("Moechten Sie weiter spielen (yes/no)"); 
       play = scanner.next(); 

      } if (UserEingabe != 0 || UserEingabe != 1){ 
       System.out.println("falsche Eingabe, versuchen Sie wieder"); 
       UserEingabe = scanner.nextInt(); 
      } 
// the loop will be repeat it as long as the player wants to play 
     while (play != no){ 
      UserEingabe = scanner.nextInt(); 
      if (play == yes){ 
       System.out.println("Sie haben " + spiele + "Spiele gespielt und " + victories + "Spiele gewonnen"); 

       victories=victories +1; 
       spiele = spiele+1; 
      } 
     } 
    } 
} 
+1

Mögliche Duplikate von [Wie kann ich Zeichenfolgen in Java vergleichen?] (Https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – OldProgrammer

+0

wahrscheinlich Math.random() ist auch nicht gut, Sie brauchen eine zufällige zwischen 0 und 1 (0 oder 1 jedes Mal), soweit ich das verstanden habe – john

+0

Was ist der Fehler? Wie kämpfst du? Was funktioniert nicht? – zuif

Antwort

0

CoinObject (Main-Methode)

public class CoinObject { 

      public static void main (String[] args) { 


      Coin coinObject = new Coin(); 
      coinObject.initializeGame(); 
      } 
     } 

Münze (Spiellogik)

import java.util.Random; 
import java.util.Scanner; 
public class Coin { 


    // In this block we initialize the global varibales, that can be used and modified by all the methods in the class 
    Scanner scanner = new Scanner(System.in); 
    private int games = 0; 
    private int victories = 0; 
    private int rightInputGuess = 0; 
    private int wrongInputGuess = 0; 
    private int[] items = new int[]{0,1}; 
    private Random rand = new Random(); 


     // This method creates the gameheader, meaning it creates a random number and passes it to the game method 
     public void initializeGame() { 
      System.out.println("Erraten sie, ob Kopf oder Zahl oben liegt:"); 
      System.out.println("Kopf=0"); 
      System.out.println("Zahl=1"); 
      int randomNumber = rand.nextInt(items.length); 

      if (randomNumber == 1) { 
       rightInputGuess = 1; 
       wrongInputGuess = 0; 
      } else if (randomNumber == 0) { 
       rightInputGuess = 0; 
       wrongInputGuess = 1; 
      } 

      playGame(randomNumber); 
     } 

     // This method is the actual game logic 
     // It takes the generates randomNumber as parameter. 
     // if the user types something else as 0 or 1 he will be asked to try to guess the number again. 
     public void playGame(int randomNumber) { 

      int userInput = scanner.nextInt(); 
      String play; 


      if (userInput == rightInputGuess){ 
       System.out.println("Sie haben richtig geraten"); 
       System.out.println("Moechten Sie weiter spielen (yes/no)"); 
       play = scanner.next(); 

       if(play.equals("yes")) { 
        victories=victories +1; 
        games = games+1; 
        initializeGame(); 
       } 
       else if (play.equals("no")){ 
        victories=victories +1; 
        games = games+1; 
        System.out.println("Sie haben " + games + " Spiele gespielt und " + victories + " Spiele gewonnen"); 
       } 

      } else if (userInput == wrongInputGuess){ 

       System.out.println("Sie haben falsch geraten"); 
       System.out.println("Moechten Sie weiter spielen (yes/no)"); 
       play = scanner.next(); 

       if(play.equals("yes")) { 
        games = games+1; 
        initializeGame(); 
       } 
       else if (play.equals("no")){ 
        games = games+1; 
        System.out.println("Sie haben " + games + " Spiele gespielt und " + victories + " Spiele gewonnen"); 
       } 

      } else if (userInput != 0 || userInput != 1){ 
       System.out.println("falsche Eingabe, versuchen Sie wieder"); 
       // The playGame method is called with the current randomNumber. 
       // If the user types something else as 0 or 1 he gets the chance to type a valid guess 
       playGame(randomNumber); 
      } 
     } 

} 

Dies erfüllt die Anforderungen des Spiels. Sollte der Benutzer eine ungültige Eingabe versuchen, die nicht '0' oder '1' ist, erhält er die Möglichkeit, eine andere Eingabe einzugeben und die aktuelle Zufallszahl zu erraten.

+0

Vielen Dank, ich schätze die Hilfe sehr. Ich überprüfte die Codeänderungen und sie sind leicht zu folgen. Ich habe bemerkt, dass Sie keine Schleife verwendet haben, um zu sehen, ob der Benutzer weiterspielen möchte oder nicht – Vas

+0

Nein, es wird keine Schleife benötigt. Will der Spieler das Spiel erneut spielen, wird die Methode throwCoin() aufgerufen. – melanzane

+0

Ok danke, das ist was ich dachte – Vas

0

Soweit ich verstehe, die wichtigen Sachen (die drei ifs) sind nicht in Ihrem while Schleife, so dass sie einmal ausgeführt werden und dann nie wieder. Ich nehme an, sie sollten auch in der while-Schleife sein. Mein Vorschlag:

do { 
    if (UserEingabe == randomNumber){ 
     System.out.println("Sie haben richtig geraten"); 
     System.out.println("Moechten Sie weiter spielen (yes/no)"); 
     play = scanner.next(); 

    } else { 

     System.out.println("Sie haben falsch geraten"); 
     System.out.println("Moechten Sie weiter spielen (yes/no)"); 
     play = scanner.next(); 

    } if (UserEingabe != 0 || UserEingabe != 1){ 
     System.out.println("falsche Eingabe, versuchen Sie wieder"); 
     UserEingabe = scanner.nextInt(); 
    } 
    // the loop will be repeat it as long as the player wants to play 
    UserEingabe = scanner.nextInt(); 
    if (play == yes){ 
      System.out.println("Sie haben " + spiele + "Spiele gespielt und " + victories + "Spiele gewonnen"); 

      victories=victories +1; 
      spiele = spiele+1; 
    } 
} while (play != no); 

Ich glaube, Sie während statt, während tun verwenden sollte, weil alles in den Klammern {} wird dann mindestens einmal ausgeführt werden (und dann abhängig davon, was Sie in der während schließlich mehrere Male schrieb) .

+0

Danke, ich werde es definitiv ausprobieren. – Vas

Verwandte Themen