Как получить доступ к определенному значению Enum в другом классе? - PullRequest
0 голосов
/ 08 февраля 2019

По сути, я пытаюсь создать свою собственную игру в Крэпс с функцией «ставок», в которой вы можете играть и видеть, сколько денег вы выиграли или проиграли.Для этого я создал класс Craps, который позволяет игроку играть в крэпс один раз, и мой код зависит от пользовательского перечисления, которое я называю «Status» (private static enum Status) со значениями PASS_WON, PASS_LOST, DP_WON, DP_LOST, KEEP_ROLLING.

Часть, с которой я борюсь, является первым шагом в классе BetMoney.Я хочу начать с того, что если в конце игры в Крэпс статус «ВЫИГРАЛ», то деньги добавляются к уже имеющимся у вас, если статус «ПОТЕРЯЛ», деньги вычитаются и т. Д., И т. Д. Однако я не могу получить доступперечисление private Status, которое я объявил в классе Craps, в классе BetMoney, чтобы сделать это, если заявление.Я совершенно не уверен, как создать геттер для перечисления, подобного этому.Есть ли способ «получить» значения enum в моем классе BetMoney, чтобы я мог использовать их в операторе if?Что я хочу сделать, это что-то вроде (если newGame [craps object] .getGameStatus () == PASS_WON), приращение выигрывает.

У меня есть геттер для закрытой переменной "GameStatus", которая используется для циклачерез игру.Это служит текущим GameStatus и имеет тип Status из перечисления, которое у меня есть.Я просто не могу правильно использовать его в BetMoney.

Резюме:

Сейчас у меня есть 2 класса.Класс Craps (который используется для игры в отдельную игру в Craps), а затем BetMoney (который будет содержать трекер выигрышей / проигрышей) и трекер денег.

Статус в настоящее время является частным статическим перечислением в моем классе Craps, иЯ пытаюсь использовать его в BetMoney.

//This is where my Status Enum is declared, these are all in Craps Class
private static enum Status {
        PASS_WON, PASS_LOST, KEEP_ROLLING, DP_WON, DP_LOST;
}; 

//Status variable for each single game
private static Status GameStatus;

//Getter for the single game status (there's also a setter)
public Status getGameStatus() {
    return GameStatus;
}

//Throughout Craps, I have a lot of code similar to this, where 
//getPoint gets the original "point" (first sum rolled) and for certain 

//sums, you win or lose the game, and GameStatus is set for use later.
switch (CrapsGame.getPoint()) {
        case 7:
        case 11:
            CrapsGame.setGameStatus(Status.PASS_WON); 
}

//How I keep looping:
while(CrapsGame.getGameStatus().equals(Status.KEEP_ROLLING)) { 
   ...logic to keep the game working...

}

//At the end, I return GameStatus.

1 Ответ

0 голосов
/ 08 февраля 2019

Вы объявили класс enum закрытым.Это предотвращает его использование за пределами вашего класса Craps.

private static enum Status {
    PASS_WON, PASS_LOST, KEEP_ROLLING, DP_WON, DP_LOST;
};

Вам нужно будет сделать это что-то иное, чем личное.Хорошей практикой является сделать каждый класс как можно более недоступным.Но вы знаете, что хотите получить доступ к нему вне игры в кости.Таким образом, если Craps и BetMoney находятся в одном пакете, вы можете просто удалить private, чтобы сделать пакет enum защищенным:

static enum Status {
    PASS_WON, PASS_LOST, KEEP_ROLLING, DP_WON, DP_LOST;
};

Внутри BetMoney, вам нужно будет либо импортировать нужные константыиспользовать или квалифицировать их использование с именем класса enum, как вы сделали в своем примере кода (например, Status.PASS_WON).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...