我的剧本有问题
我有一个返回卡片的方法,另一个返回名称,另一个返回值,另一个返回诉讼
public Card pickRandomCard() {
while (rand < 6) {
System.out.println(deckOfCards.get(rand));
int cardValuePlayer1 = (deckOfCards.get(rand).toInt());
currentTotal1 = cardValuePlayer1;
String name1 = (deckOfCards.get(rand).toString());
nameF = name1;
String suit_1 = (deckOfCards.get(rand).suit());
suit1 = suit_1;
return deckOfCards.get(rand++);
}
return null;
}
public int totalValuePlayer1() {
return currentTotal1;
}
public String name1() {
return nameF;
}
public String suit_1() {
return suit1;
}
但是现在,我想创建一个卡片的arraylist,就像一手牌,所以我的ideia创建了一个带有5张卡片的arraylist,但是如果我做了类似的事情
List<Card> hand = new ArrayList<Card>();
Iterator<Card> iter = hand.iterator();
while (iter.hasNext()) {
hand.add(gr.pickRandomCard());
}
我在线程“main”中收到异常java.lang.IndexOutOfBoundsException:索引:2,大小:0
我在另一个类中有这个代码来调用每个方法,套装,卡片,图像的价值,但我需要创建一个列表来比较卡片,并且使用下面的代码,不可能逐一比较卡片
ActionListener one = new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (gr1.getCounter1() < 5) {
gr1.setCounter1(gr1.getCounter1() + 1);
test1.setIcon(play1a);
pn1.setText(Integer.toString(play2a));
pn5.setText(play3a);
pn50.setText(play4a);
} else {
pn5.setText("No more cards");
}
}
};
arraybtn[1].addActionListener(one);
arraybtn[1].setPreferredSize(new Dimension(120, 20));
play1a = gr.pickRandomCard().getImage();
play2a = gr.totalValuePlayer1();
play3a = gr.name1();
play4a = gr.suit_1();
arraybtn[1].setText(play3a);//change the name of button
我认为问题在于我需要创建4个列表,每个列表用于对应的方法(套装,图像,值),但我不知道我该怎么做
感谢
答案 0 :(得分:2)
在你的代码中有一个缺陷:
// this iterates over existing cards
Iterator<Card> iter = hand.iterator();
// but there are no cards yet
while (iter.hasNext() /* this will never return true */ ) {
// so this is never executed
hand.add(gr.pickRandomCard());
}
请改为尝试:
List<Card> hand = new ArrayList<Card>();
for(int i = 0; i < 5; i++){
hand.add(gr.pickRandomCard());
}
答案 1 :(得分:2)
List<Card> hand = new ArrayList<Card>();
Iterator<Card> iter = hand.iterator();
while (iter.hasNext()) {
hand.add(gr.pickRandomCard());
}
你的“手”是空的,因此你没有元素。这就是你的大小为0的原因;
此外,您可以创建一个新的类,例如Playa,它具有名称,套装,图像,值属性。
答案 2 :(得分:1)
while (iter.hasNext()) {
hand.add(gr.pickRandomCard());
}
iter来自您刚刚创建的空列表,因此hasNext()将始终返回false;
你提到像suit和hand这样的概念,但已经决定它们应该是ArrayLists。你为什么不创建Suit和Hand类。手可能包含一些卡片集合以及填充它的构造器或方法。套装应该是一个类似于
的枚举enum Suit{
CLUBS,
SPADES,
HEARTS,
DIAMONDS
}
如果您以OO方式正确建模数据,您会发现代码更容易编写。
答案 3 :(得分:0)
基于Sean的答案,你不能迭代hand
ArrayList的原因是因为它没有任何项目。所以你需要使用for循环来添加它们。