Может кто-нибудь помочь создать класс PairOfDice, используя D ie. java - PullRequest
0 голосов
/ 12 апреля 2020

Я думаю, что моя проблема связана с классом PairOfDice, потому что мне нужно использовать только объект, содержащий оба значения игральных костей в классе EyesHaveIt. Я получаю сообщения об ошибках типа: PairOfDice. java: 16: ошибка: класс, интерфейс или ожидаемое перечисление. Publi c int getDie1 () ^

PairOfDice. java: 19: ошибка: класс, ожидается интерфейс или перечисление} ^

PairOfDice. java: 21: ожидаемая ошибка: класс, интерфейс или перечисление publi c int getDie2 () ^

PairOfDice. java : 24: ошибка: ожидается ожидаемый класс, интерфейс или перечисление} ^

EyesHaveIt. java: 44: ошибка: не удается найти символ int die1 = dieOne.getDieOneValue (); ^ symbol: method getDieOneValue () расположение: переменная dieOne типа PairOfDice EyesHaveIt. java: 45: ошибка: не удается найти символ

Вот моя попытка исправить это. Спасибо!

Вот мой класс D ie:

import java.util.Random;

public class Die

{

public static Random generator = new Random();

public int roll ()

{

      return generator.nextInt(6) + 1;  // Randome # dice between 1-6

}

}

\\Here's my PairOfDice class:

public class PairOfDice
{
   private int die1Value;
   private int die2Value;

   public PairOfDice()
   {
      Die die1 = new Die();
      Die die2 = new Die();

      die1Value = die1;
      die2Value = die2;
    }
}   
   public int getDie1()
   {
      return die1;
   }

   public int getDie2()
   {
      return die2;
   } 

}

Вот класс EyesHaveIt, где я пытаюсь использовать этот код:

import java.util.Scanner;

public class EyesHaveIt
{
   Scanner kb = new Scanner(System.in);
   private int turnScore;
   private int computerTotalScore;
   private int playerTotalScore;
   private int computerTurnNumber;
   private int playerTurnNumber;
   public int roundPoints;
   private String userName;

   public void init(String name)
   {
      userName = name;
   }

   public void playGame()
   {
      computerTurn();
   }

   public void computerTurn()
   {
      turnScore = 0;
      System.out.println("Computer Turn: ");
      while (turnScore < 20)
      {
         rollTheDice();
      }
   }

   public void rollTheDice()
   {
      PairOfDice dieOne = new PairOfDice();
      PairOfDice dieTwo = new PairOfDice();
      int die1 = dieOne.getDieOneValue();
      int die2 = dieTwo.getDieOneValue();
      System.out.println("Rolled: " + die1 + " and " + die2);
   }

Этот класс будет абстракцией физической пары стандартных шестигранных кубиков. Только один объект этого класса будет создан объектом EyesHaveIt и использован на протяжении всей игры обоими игроками. Вы должны рассматривать этот объект как пару костей. Когда игрок катится во время хода, этот игрок катит объект PairOfDice. Игроки никогда не бросают объект D ie напрямую. Клиент класса PairOfDice свернет объект PairOfDice, получит значения каждого d ie в паре и т. Д. c. Этот класс должен иметь ровно два атрибута: два объекта класса, D ie. Это единственный класс, который использует класс D ie.

1 Ответ

0 голосов
/ 13 апреля 2020

Класс D ie в порядке:

import java.util.Random;

public class Die {

    public static Random generator = new Random();

    // Roll of a 'Single Die'
    public int roll() {
        return generator.nextInt(6) + 1;  // Random # dice roll between 1-6
    }
} 

В вашем текущем PairOfDice классе, однако, у вас есть два указанных c Глобальные переменные-члены экземпляра класса ( int тип данных) с именами die1Value и die2Value еще в конструкторе того же класса, который вы объявляете двумя D ie ( die1 и die2 ) и присвойте им die1Value и die2Value соответственно:

  public PairOfDice() {
      Die die1 = new Die();
      Die die2 = new Die();

      die1Value = die1; 
      die2Value = die2;
}

Вы не можете сделать это, поскольку die1 и die2 не int , они D ie S. Кроме того, die1 и die2 также должны были быть объявлены как переменные-члены экземпляра. Что должно было быть сделано:

 public class PairOfDice {

     private int die1Value;
     private int die2Value;

     private final Die die1 = new Die();
     private final Die die2 = new Die();

     // PairOfDice Constructor...
     public PairOfDice() {
        this.die1Value = die1.roll();
        this.die2Value = die2.roll();
    }

    public int getDie1() {
        return this.die1Value;
    }

    public int getDie2() {
        return this.die2Value;
    }

    // Roll of a 'Pair Of Dice'
    public void roll() {
        this.die1Value = die1.roll();
        this.die2Value = die2.roll();
    }
}

Теперь die1Value и die2Value фактически назначены int 's (случайное значение броска каждого d ie).

Я ничего не знаю об игре под названием EyesHaveIt , и мне действительно не хочется исследовать ее, но я уверен, что смотрю на код он не воспроизводит два набора кубиков (4 кубика - каждое объявление PairOfDice состоит из двух кубиков).

Я думаю, что Пара игральных костей, используемая для игры, должна быть объявлена ​​как переменная члена класса, а не объявлять новый набор игральных костей каждый раз, когда вам нужен бросок. С добавлением метода roll () в классе PairOfDice вы можете использовать одну и ту же пару кубиков бесконечно. Вот простой пример использования этих двух классов, мы собираемся бросить пару игральных костей 10 раз:

public class JustADemo {

    private final PairOfDice dice = new PairOfDice();
    private int dice1;
    private int dice2;

    public static void main(String args[]) {
        // Done this way to avoid the need for statics.
        new EyesHaveIt().startDemo(); 
    }

    private void startDemo(String[] args) {
        // Roll a Pair of dice 10 times...
        for (int i = 0; i < 10; i++) {
            System.out.println("Roll #" + (i + 1) + ":");
            rollTheDice();
            System.out.println();
        }
    }

    private void rollTheDice() {
        dice.roll();
        dice1 = dice.getDie1();
        dice2 = dice.getDie2();
        System.out.println("Face of Die 1: --> " + dice1);
        System.out.println("Face of Die 2: --> " + dice2);
    }
}
...