java letter game [домашнее задание] - PullRequest
1 голос
/ 04 марта 2012

У меня проблема с домашним заданием.Я не прошу никакого кода вообще.Все, что я прошу, это несколько советов о том, как выполнить некоторые части задания.

Назначение следующее: N количество игроков (n задается пользователем) и «ящик» с буквами (AZ), неопределенное количество букв или как указано в задаче: не ограничено).Каждое письмо имеет индекс.A = 0, B = 1, .., Z = 25.Каждый игрок получает случайное письмо.Первый игрок, который формирует слово размером p> = 3 (p задается пользователем) со следующим свойством: буквенные индексы должны быть в арифметической прогрессии.Например, если p = 3, ABC или ZXV - выигрышная комбинация.

Программа должна показывать на каждой итерации буквы каждого игрока.Когда один игрок выигрывает, программа должна показать игрока, который выиграл, и победное слово.

Предлагаются следующие варианты: использование Math.random () и StringBuilder для работы со строками.

То, как я понялточка входа в эту программу просит пользователя указать количество игроков.После этого я должен сгенерировать N количество объектов (учитывая класс Player).Первый глупый вопрос: как мне сгенерировать N объектов.Что-то вроде:

for (int i = 0 ; i < n ; i++) {
    Player player1 = new Player();
    //how do I allocate the other objects?
}

Есть ли способ присвоить индексам буквы?Все, что я мог придумать, это генерировать случайные буквы с чем-то вроде:

    Random r = new Random();
    box = new char[9999];
    for (int i = 0; i < 9999; i++){
        box[i]= (char)(r.nextInt(25)+65); //there are 26 letters and A starts on position 65
    }

Есть еще идеи?Буду очень признателен за любые советы о том, как ДУМАТЬ о решении этой проблемы.

Ответы [ 4 ]

2 голосов
/ 04 марта 2012

как мне сгенерировать N объектов

Использовать список или массив. Большая часть идиоматического кода Java использует списки над массивами

List<Player> players = new ArrayList<Player>();
for (int i = 0; i < n; i++) {
    players.add(new Player());
}

Теперь players содержит всех n игроков, а для ссылки на конкретного игрока k (от 0 до n - 1) вы используете players.get(k), например,

players.get(k).takeTurn();

вызовет takeTurn на k-го игрока.

Есть ли способ присвоить индексам буквы?

Я не совсем уверен, что вы подразумеваете под этим или почему вы генерируете 9999 символов, но способ, которым вы генерируете 9999 случайных символов, теперь не будет работать, потому что он исключит 'Z'. Каждый раз, когда вы звоните r.nextInt, вы на самом деле указываете 1 сверх верхнего предела, который вы хотите . Итак, чтобы сгенерировать 9999 случайных символов от 'A' до 'Z', вам нужно

Random r = new Random();
box = new char[9999];
for (int i = 0; i < 9999; i++){
    box[i] = (char)(r.nextInt((int)'Z' - (int)'A' + 1) + 'A');
}

, который использует тот факт, что символы имеют много общих характеристик с целочисленными числовыми типами в Java.

1 голос
/ 04 марта 2012

По вопросу 1: вы можете объявить массив из Player объектов:

Player[] players;

Тогда, когда вы знаете количество игроков, вы можете назначить ему массив соответствующего размера:

players = new Player[n];

Этот массив все еще является null, поэтому вы можете инициализировать его с помощью цикла, используя нижний индекс:

* * 1010

(Вы также можете использовать ArrayList для этого, но в этом нет никакого преимущества (кроме изучения структуры сбора), поскольку вы точно знаете, сколько Player объектов вам нужно.)

Относительно вашего второго вопроса, существуют различные техники. Вы можете определить массив char:

char[] chars = { 'A', 'B', /* etc */, 'Z' };

Тогда вы можете получить доступ к каждому персонажу, подписавшись на него. Или вы можете определить строку:

String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

Затем вы можете извлечь отдельный символ как char, используя chars.charAt(i) или как односимвольную строку с chars.substring(i, i + 1).

1 голос
/ 04 марта 2012

Для создания нескольких игроков вам необходимо использовать контейнер:

Vector<Player> players = new Vector<Player>();
for ( int i = 0 ; i < n ; i++ )
    players.add(new Player());

Vector это только пример, есть тонны, из которых вы можете выбрать.

Для сопоставления чисел с буквами, я бы также пошел с Vector. Или возможно HashMap от int до char. Но так как целые числа являются последовательными, Vector также сделает это.

0 голосов
/ 04 марта 2012

Вы можете поместить экземпляры "Player" в массив (массив для динамического размера). Только что увидел, что кто-то разместил код для ArrayList. Проверьте это!

...