2015-02-19 5 views
0

Конечно, это, наверное, что-то довольно просто. Я просмотрел по ошибке, но я должен быть уверен.Как получить значение от конструктора в метод?

Я работаю над тем, чтобы классический класс PlayingCard работал с тестером PlayingCard, чтобы проверить его как задание. Теперь, когда все будет сделано, у меня будет класс Pack, а также для создания пакета карт и перетасовки его вместе с методом equals в классе PlayingCard, но пока я просто хочу получить базовый класс PlayingCard для работать с тестером.

Это текущая настройка для класса PlayingCard, игнорируйте инструкцию int для i, как это было для генератора случайных чисел с помощью цикла for, но это было или, скорее, должно быть рендерировано с помощью конструктор PlayingCard.

public class PlayingCard 
{ 
    public PlayingCard(int rank, int suit) 
    { 
     this.rank = rank; 
     this.suit = suit; 
    } 


    // Values for rank 
    public final int TWO = 2; 
    public final int THREE = 3; 
    public final int FOUR = 4; 
    public final int FIVE = 5; 
    public final int SIX = 6; 
    public final int SEVEN = 7; 
    public final int EIGHT = 8; 
    public final int NINE = 9; 
    public final int TEN = 10; 
    public final int JACK = 11; 
    public final int QUEEN = 12; 
    public final int KING = 13; 
    public final int ACE = 14; 

    // Values for suits 
    public final int CLUBS = 0; 
    public final int DIAMONDS = 1; 
    public final int HEARTS = -1; 
    public final int SPADES = -2; 

    // Set random Rank and Suit values 
    public int rank; 
    public int suit; 
    public int i; 

    public int getRank() 
    { 
     return rank; 
    } 

    public int getSuit() 
    { 
     return suit; 
    } 

    @Override 
    public String toString() 
    { 
     return getClass().getName() + "[rank " + rank + "suit " + suit + "]"; 
    } 

    public void format() 
    { 
     System.out.format(rank + " of " + suit); 
    } 
} 

И это текущий тестер, обратите внимание, я использовал набор значений на основе значений для ранга и масти в классе.

public class PlayingCardTester 
{ 
    public static void main(String[] args) 
    { 
     PlayingCard test; 
     test = new PlayingCard(14, 1); 
     test.getRank(); 
     test.getSuit(); 
     test.toString(); 
     test.format(); 
     System.out.println(""); 
    } 

} 

Значения, вводимые в конструктор, должны использоваться в методах класса. Выход я хочу от фактического тестера и класса что-то вроде этого:

Ace of Diamonds 

Вместо этого, я получаю это:

0 of 0 

То, что я спрашиваю, как я могу использовать значение, приведенное в конструктор в методах, реализованных в тесте и классе, поэтому я могу получить вывод, который я хочу? Используемые значения a означают, что они связаны с теми, которые указаны в классе, но что-то говорит мне, что они бесполезны или не используются в фактическом классе. Вероятно, это нечто довольно простое, что я пропустил, но не смог найти, или сам был невероятно глупым, но я хочу быть уверенным в том, что требуется нечто более сложное.

Рекомендации?

EDIT: Добавлены детали конструктора, теперь у меня есть выход:

14 of 1 

ответ

2

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

Вторая проблема заключается в том, что вы устанавливаете значения int для представления ранга и костюма, но не предоставляете соответствующее строковое представление в вашем классе PlayingCard.

Вы могли бы сделать это для рядов, создавая массив, как:

String ranks [] = {"TWO","THREE"...}; 

и используя ranks[rank -2] в формате();

В качестве целочисленных представлений целого числа не имеют последовательных значений, необходимо использовать другую структуру данных (например, карту).

Более простой способ сделать все это, однако, состоит в создании двух перечислений, как показано ниже. Затем вы должны создать новую карту, как:

PlayingCard card = new PlayingCard(Rank.ACE, Suit.SPADES); 

Enum для костюма:

public enum Suit { 

    HEARTS(0), SPADES(-2), CLUBS(-1), DIAMONDS(1); 

    private int value; 

    private Suit(int value){ 
     this.value = value; 
    } 

    public int getValue(){ 
     return value; 
    } 
} 

Enum Для Ранг:

public enum RANK { 

    TWO(2), THREE(3), ACE(14); 

    private int value; 

    private Suit(int value){ 
     this.value = value; 
    } 

    public int getValue(){ 
     return value; 
    } 
} 

игральной карты:

public class PlayingCard 
{ 
    private Rank rank; 
    private Suit suit; 

    public PlayingCard(Rank rank, Suit suit) 
    { 
     this.rank = rank; 
     this.suit = suit; 
    } 

    public Rank getRank() 
    { 
     return rank; 
    } 

    public Suit getSuit() 
    { 
     return suit; 
    } 

    @Override 
    public String toString() 
    { 
     return getClass().getName() + "[rank " + rank + "suit " + suit + "]"; 
    } 

    public void format() 
    { 
     System.out.format(rank + " of " + suit); 
    } 
} 
+0

Я не знакомы с перечислениями, какие-либо приличные ссылки или объяснения? – SIHB007

+0

Я тоже заметил, я предполагаю, что эти перечисления должны быть в отдельных файлах? – SIHB007

2

Вы должны установить параметры из конструктора экземпляра.

public PlayingCard(int rank, int suit) 
     { 
      this.rank = rank; 
      this.suit = suit; 
     } 

Этот конструктор принимает два параметра, но ничего не делает с ними.

public PlayingCard(int rank, int suit) 
     { 

     } 

и потому, что ИНТ естественно устанавливается в 0 Вот почему вы получите два 0.