2015-08-25 2 views
1

Почему значение clowns равно 0 для ниже?Почему мой конструктор не создает экземпляр переменной?

Если я печатаю numOfDecks, он печатает 3, как и ожидалось.

public class CardSet { 

private static int numOfDecks; 
char suits [] = {'a','s','h','c'}; 
char ranks [] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'}; 

public CardSet(int number){ 

    if (number > 0) { 
     this.numOfDecks = number; 

    } 
    else this.numOfDecks = 3; 
} 

public static int getNumOfDecks(){ 
    return numOfDecks; 
} 

static int clowns = numOfDecks; 

public static void main (String [] args){ 
    CardSet cards = new CardSet(3); 
    System.out.println(clowns); //prints out 0 
    System.out.println(numOfDecks); // prints out 3 
} 

ответ

6

Это устанавливает значение переменнойпараметра:

else numberOfDecks = 3; 

Что не то, что вы действительно хотите сделать. Вместо этого это должно быть:

else this.numberOfDecks = 3; 

Который задает значение поля. Или более кратко вы можете сделать:

public CardSet(int numberOfDecks){ 
    this.numberOfDecks = (numberOfDecks > 0) ? numberOfDecks : 3; 
} 

В качестве примечания, рассмотреть возможность использования перечислений для костюмов и рангов, так как это один из classic examples given for their use.

+0

Я немного изменил код на основе ваших предложений, однако его все еще не работает для меня. – summerNight

+3

@summerNight: пожалуйста, не перекладывайте требования на нас, так как это затрудняет ответы на вопросы. Но на ** новый ** вопрос отвечает, проверяя, когда вы устанавливаете значение клоунов: оно выполняется при времени объявления переменной, которое равно ** до того, как был вызван конструктор. Поэтому неудивительно, что он использует начальное значение numberOfDecks. –

+1

И статический, статический, статический. – chrylis

1

Я думаю, что сначала numOfDecks = 0, клоуны устанавливаются в то же значение, что и numOfDecks. Когда вы создаете конструктор, numberOfDecks устанавливается в новое значение как ваше условие внутри конструктора. Но клоуны снова не установлены. Итак, я думаю, что вы должны написать метод getClowns() вместо вызова клоунов свойств в качестве вашего текущего кода.

public class CardSet { 

    private int numOfDecks; 
    char suits [] = {'a','s','h','c'}; 
    char ranks [] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'}; 
    private int clowns; 

    public CardSet(int numberOfDecks){ 

     if (numberOfDecks > 0) { 
      this.numOfDecks = numberOfDecks; 
     } 
     else numOfDecks = 3; 
    } 

    public int getNumOfDecks(){ 
     return numOfDecks; 
    } 

    /** 
    * set the clowns from NumOfDecks and return it 
    * @return int value 
    * */ 
    public int getClowns() { 
     clowns = getNumOfDecks(); 
     return clowns; 
    } 


    public static void main(String[] args) { 
     CardSet cardSet = new CardSet(2); 
     System.out.println(cardSet.getNumOfDecks()); 
     System.out.println(cardSet.getClowns()); 

    } 
} 
+0

Спасибо! Я получаю это :) Практически все глобальные вары определены до того, как конструктор класса называется правильным? – summerNight

Смежные вопросы