遍历Java中的对象数组列表



我试图在这里找到我的问题的答案,但没有运气-请让我知道这个问题是否已经回答了,我会删除这个问题。

我想遍历扑克牌的数组列表,下面是我的代码:

public static void showCards(ArrayList<Card> cards){
Iterator iterator = cards.iterator();
while(iterator.hasNext()){
String object = String.valueOf(iterator.next());
System.out.println(object);
}
}

我想打印每张卡片的值,但我只得到引用:

com.company.Card@4517d9a3
com.company.Card@4517d9a3

我也试过循环-同样的事情。我做错了什么?

卡片类,如果需要的话:

public class Card {
private CardSuit cardSuit;
private CardValue cardValue;
public Card(CardSuit cardSuit,  CardValue cardValue) {
this.cardValue = cardValue;
this.cardSuit = cardSuit;
}
public CardValue getCardValue() {
return cardValue;
}
public CardSuit getCardSuit() {
return cardSuit;
}
}

你的代码太复杂了:

  1. 您可以使用所谓的增强型for循环来代替Iterator。这是相同的,但更短。

  2. 您不必呼叫String.valueOf()toString()。你可以为java中的任何对象调用System.out.println(),它会自动将其转换为String

  3. 如果while循环只做一件事,则不需要括号。

代码现在看起来像这样:

public static void showCards(ArrayList<Card> cards) {
for (Card card : cards) System.out.println(card);
}

因为这是如此简单,您甚至可能不再需要showCards,但可以直接使用for循环。


要将对象转换为String, java使用这种奇怪的符号:

完整类名+ "@"+十六进制哈希码

如果您希望java以不同的方式将Card转换为String,您需要在Card类中重写toString()方法:

public String toString() {
return "Card with suit " + cardSuit + " and value + " cardValue;
}

(您可能必须为CardSuitCardValue类做同样的事情)。

您可以重写默认方法toString:

public class Card {
...
@Overrite
public String toString() {
return "{ cardSuit=" + cardSuit + ", cardValue=" + cardValue "}";
}

还可以将对象强制转换为Card,并使用getCardValue():

public static void showCards(ArrayList<Card> cards){
Iterator iterator = cards.iterator();
while(iterator.hasNext()){
Object object = iterator.next();
Card c = (Card) object;
System.out.println(c.getCardValue());
}
}

最新更新