为什么我的构造函数没有实例化变量?

sum*_*ght 1 java

为什么值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
}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 6

这将设置参数变量的值:

else numberOfDecks = 3;
Run Code Online (Sandbox Code Playgroud)

不是你真正想做的事情.相反它应该是:

else this.numberOfDecks = 3;
Run Code Online (Sandbox Code Playgroud)

这设置了字段的值.或者更简洁一点,你可以这样做:

public CardSet(int numberOfDecks){
    this.numberOfDecks = (numberOfDecks > 0) ? numberOfDecks : 3;
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,请考虑使用枚举为您的西装和等级,因为这是他们使用经典示例之一.

  • @summerNight:请不要改变对我们的要求,因为这很难回答问题.但是通过检查你设置小丑的值来回答**新问题:它是在变量声明时间完成的,它是**之前**构造函数被调用.因此,使用numberOfDecks的初始值并不奇怪. (3认同)