如何访问同一类但不同方法中的列表



我有一个名为DeckPC:的类

public class DeckPC {
// creating 3 cards, composed of one random number from 1 to 7
private int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;
static List<Integer> DeckPC = new ArrayList<Integer>(); 
public void creatingDeck(int cardSword, int cardBast, int cardGold) {
this.cardSword = cardSword;
this.cardBast = cardBast;
this.cardGold = cardGold;
// trying to add the variables(ints) from above into the DeckPC list.
DeckPC.add(cardSword);
DeckPC.add(cardBast);
DeckPC.add(cardGold);
}
public List<Integer> getDeckPC() {  
return DeckPC;
}
}

然后是一个带有main方法的main类,我想在其中调用getDeckPC((,以便它显示我插入到DeckPC中的值:

DeckPC deckPC = new DeckPC();
deckPC.getDeckPC();

但问题是,它根本没有回报任何东西。但是,如果我在creatingDeck方法内部初始化列表"DeckPC"(没有静态(,那么它会返回一个列表,但为空,如下所示:[]。我做错了什么?也许使用了错误的访问修饰符?

在调用getDeckPC()之前,您需要调用creatingDeck(...),以便将列表项添加到列表中:

DeckPC deckPC = new DeckPC();
deckPC.creatingDeck(1, 2, 3); ///// ADD this line
deckPC.getDeckPC();

顺便说一句,如果类、成员变量、实例化变量和方法的名称不相同,那么代码将更容易调试,并避免一些很难发现的错误。

您还没有调用creatingDeck过程来初始化列表的值,这里有两个选项:

1-您可以通过调用creatingDeck过程并传递一些参数来初始化代码,如果您想要一个随机数,这不是一个好主意。

2-你可以使用这样的静态初始值设定项:

public class DeckPC {
// creating 3 cards, composed of one random number from 1 to 7
private static int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private static int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private static int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;
static List<Integer> DeckPC = new ArrayList<Integer>(); 
static {
DeckPC.add(cardSword);
DeckPC.add(cardBast);
DeckPC.add(cardGold);
}
public List<Integer> getDeckPC() {  
return DeckPC;
}
}

-静态初始值设定项在程序第一次运行时被调用,因为在Java中,静态变量在程序的整个生命周期中都可用。

-更新:还有一个实例初始值设定项。如果你想在每次创建类的新实例时更新值,代码将如下所示:

public class DeckPC {
// creating 3 cards, composed of one random number from 1 to 7
private int cardSword = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private int cardBast = (int)(Math.random() * ((7 - 1) + 1)) + 1;
private int cardGold = (int)(Math.random() * ((7 - 1) + 1)) + 1;
static List<Integer> DeckPC = new ArrayList<Integer>(); 
{
DeckPC.add(cardSword);
DeckPC.add(cardBast);
DeckPC.add(cardGold);
}
public List<Integer> getDeckPC() {  
return DeckPC;
}
}

您应该首先调用creatingDeck方法来填充列表,然后调用getDeckPC((来打印它,或者只调用

公共列表getDeckPC(({
creatingDeck(1,2,3(;//<------在此处调用它返回DeckPC
}

最新更新