对象数组

时间:2011-02-03 15:14:10

标签: java list iterator

我的剧本有问题

我有一个返回卡片的方法,另一个返回名称,另一个返回值,另一个返回诉讼

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个列表,每个列表用于对应的方法(套装,图像,值),但我不知道我该怎么做

感谢

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循环来添加它们。