我试图在这里找到我的问题的答案,但没有运气-请让我知道这个问题是否已经回答了,我会删除这个问题。
我想遍历扑克牌的数组列表,下面是我的代码:
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;
}
}
你的代码太复杂了:
-
您可以使用所谓的增强型for循环来代替
Iterator
。这是相同的,但更短。 -
您不必呼叫
String.valueOf()
或toString()
。你可以为java中的任何对象调用System.out.println()
,它会自动将其转换为String
。 -
如果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;
}
(您可能必须为CardSuit
和CardValue
类做同样的事情)。
您可以重写默认方法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());
}
}