Очень простые вещи: возникли проблемы с программой, имитирующей игровые автоматы - перечисления и массивы - PullRequest
0 голосов
/ 16 марта 2012

Итак, мой профессор дал задание, в котором мы должны создать рабочую программу игрового автомата. Машина имеет 3 барабана, которые сами состоят из 6 шести символов, хранящихся в перечислении:

public enum Symbol 
{   
    SEVEN(12,"images/seven.jpg"),
    WATERMELON(10,"images/watermelon.jpg"),
    ORANGE(8,"images/orange.jpg"),
    PLUM(6,"images/plum.jpg"),
    LEMON(4,"images/lemon.jpg"),
    CHERRY(2,"images/cherry.jpg");
}

Мы должны использовать эти символы для создания "катушечного" объекта. Моя проблема заключается в заполнении этого барабана (который на самом деле представляет собой массив Symbol []) символами в порядке, запрошенном профессором.

Он попросил нас использовать класс Random для заполнения барабана, используя 10 в качестве начального числа. Вот что у меня есть:

//Creating an unrandomized reel array, which contains the symbols in the exact order as they appear in the enum
private Symbol[] unrandomizedReel = new Symbol[]{Symbol.SEVEN, Symbol.WATERMELON, Symbol.ORANGE, Symbol.PLUM, Symbol.LEMON, Symbol.CHERRY};

//Declares local Symbol array
Symbol[] randomizedReel = new Symbol[6];

//Keeps track of the position in the unradomized reel array
int unrandomizedReelIndex = 0;

//Creates a Random object which will be used to generate values based
//on the seed. **seed == 10**
Random randNum = new Random(seed);

//Loop will populate the randomized reel
while(unrandomizedReelIndex < 6)
  {
    //This int will hold values ranging from 0-5. Will be used as an index
    //to populate randomized reel
    int rangedRandomNumIndex = randNum.nextInt(6);

    //if the element at the given index in the randomized reel is empty
    if(randomizedReel[rangedRandomNumIndex] == null)
      {
        //A symbol from the unrandomized reel is added to it
        randomizedReel[rangedRandomNumIndex] = unrandomizedReel[unrandomizedReelIndex];

        //The index used to iterate through the unrandomized reel is incremented by 1
        unrandomizedReelIndex++;
      }
  }

Запустив этот «тасующий» код, я получаю следующий вывод:

WATERMELON
PLUM
CHERRY
SEVEN
ORANGE
LEMON

Однако, по словам моего профессора, результат должен быть:

ORANGE
PLUM
SEVEN
LEMON
WATERMELON
CHERRY

Что я делаю не так? Почему мой результат отличается от его, хотя мы оба используем 10 в качестве начального числа? Любая помощь будет оценена. Спасибо.

1 Ответ

1 голос
/ 16 марта 2012
new Symbol[]{Symbol.SEVEN, Symbol.WATERMELON, Symbol.ORANGE, Symbol.PLUM, Symbol.LEMON, Symbol.CHERRY};

можно упростить до

Symbol.values()

Полагаю, ваш профессор выставляет

   unrandomizedReel[Random.nextInt(6)]

в позиции 0, затем обнуляем этот элемент из unrandomizedReel, получая случайное число x между 1 и 5 и принимая x-е ненулевое значение и помещая его в позицию 1, обнуляя его, затем повторяя с число от 1 до 4 и т. д.

Если у вас есть основания полагать, что ваш профессор использует другой алгоритм, отредактируйте ваш вопрос, используя эту информацию.

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