2016-08-22 15 views
0

私はちょうどJavaを練習しており、かなり新しいです。私はちょうどプレーヤーの勝利、損失、勝率と総賞金を追跡する乱数生成プログラムを作成しようとしていました。このプログラムのロジックは、プレイヤーがセッションごとに3つのチャンスを得ることであり、コンピュータは、プレイヤーが推測する必要があるか、むしろ一致させる必要がある乱数を生成する。勝敗、勝率、総賞金の計算

私は3つのクラスを持っています:ゲーム(主なロジックを保持)、Player(勝利/損失などがあります)、RandomNumberGenerator(乱数を生成する)です。

私はプログラムでスタートしたが、私は選手クラスの別の変数としてgamesWon、gamesLost、totalWinnings、winPercentを宣言する必要があるかどうか混乱してきましたか?どんな助けもありがとう。

ここでプレイヤークラスはこれまでです:

public class Player { 
    private String name; 
    private int totalWinnings; 
    private int gamesWon; 
    private int gamesLost; 

    public Player() { 
     this.name = "default"; 
     this.totalWinnings = 0; 
     this.gamesWon = 0; 
     this.gamesLost = 0; 
    } 

    public Player(String name) { 
     this.name = "default"; 
     this.totalWinnings = 0; 
     this.gamesWon = 0; 
     this.gamesLost = 0; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getGamesWon() { 
     return gamesWon; 
    } 

    public void setGamesWon(int gamesWon) { 
     this.gamesWon += gamesWon; 
    } 

    public int getGamesLost() { 
     return gamesLost; 
    } 

    public void setGamesLost(int gamesLost) { 
     this.gamesLost += gamesLost; 
    } 

    public void setTotalWinnings(int totalWinnings) { 
     this.totalWinnings += totalWinnings; 
    } 

    public int getTotalWinnings() { 
     return totalWinnings; 
    } 
} 

ゲームクラス:

public class Game { 

    private Player player; 
    private LuckyNumberGenerator lng; 

    public Game() { 
     player = new Player(); 
     lng = new LuckyNumberGenerator(); 
    } 

    private void eventLoop() { 
     Scanner scanner = new Scanner(System.in); 
     int choice = 0; 
     boolean exit = false; 
     while (!exit) { 
      System.out.println("Welcome to the Guessing Game"); 
      System.out.println("=============================="); 
      System.out.println("(1) Set Up New Player"); 
      System.out.println("(2) Play One Round"); 
      System.out.println("(3) Player Win Statistics"); 
      System.out.println("(4) Display Game Help"); 
      System.out.println("(5) Exit Game"); 
      System.out.println("Choose an option: "); 

      try { 
       choice = Integer.parseInt(scanner.nextLine()); 
       if (choice < 1 || choice > 5) { 
        System.err.println("Error : Choose an option between 1 and 5"); 
        choice = 0; 
       } 
      } catch (NumberFormatException e) { 
       System.err.println("Error : Choose an option between 1 and 5"); 
       choice = 0; 
      } 

      switch (choice) { 
      case 1: 
       createNewPlayer(scanner); 
       break; 
      case 2: 
       guessNumber(scanner); 
       break; 
      case 3: 
       printStatistics(); 
       break; 
      case 4: 
       printHelp(); 
       break; 
      case 5: 
       exit = true; 
      } 
     } 
     scanner.close(); 
    } 
} 

答えて

1

OO設計によると、gamesWon、gamesLost、totalWinningsとwinPercentなどのプロパティは、プレーヤーのクラスにする必要がありますのみ(正しい)。

あなたは、デフォルトまたはゼロパラメータ化コンストラクタと同じパラメータ化コンストラクタを持っています。渡された値に関係なく、すべてのオブジェクトに対して同じ名前の文字列を "デフォルト"に設定するので、名前(String)をパラメータとして渡すことはありません。

1から100(選択肢)の間でユーザーに質問すると、スイッチに5つのケースしかないので意味をなさない。

あなたはそれはデータのみを走査するために使用されるべきである他の方法にスキャナオブジェクトを渡し、使用後すぐにそれを閉じてはいけません。 スキャナオブジェクトを定義して、必要な方法でそれを使用することができます。

+0

あなたの答えをありがとう。 1-100は意図せず、修正されました。 –

1

名前を受け入れるようにコンストラクタを変更しました。

public Player() { 
     Player("default"); 
    } 

    public Player(String name) { 
     this.name = name; 
     this.winPercent = 0; 
     this.totalWinnings = 0; 
     this.gamesWon = 0; 
     this.gamesLost = 0; 
    } 

Playerはゲームを消費するオブジェクトです。ゲームのロジックを書き、Playerをできるだけシンプルに保つ方が良い。

+0

ありがとう!再確認するだけで、Gameクラスのすべての計算が正しく行われますか? Playerクラスの中に何かを入れる必要はありませんか? –

+1

はい。更新された回答を見つけてください。 – JavaUser

+0

JavaUserデフォルトコンストラクタから他のコンストラクタを呼び出す方法は?これを実現するには、すべてのデフォルト値をクラス内の変数に設定するコンストラクタが1つだけあれば十分です。 –

関連する問題