将 ArrayList<Object> 转换为字符串
Convert ArrayList<Object> to string
嗨,我正在尝试练习 java,而且才刚刚开始!
为了练习,我正在尝试构建一个简单的扑克游戏,但遇到了纸牌数组列表问题。我试图打印出来,但只有地址输出到控制台,自然我尝试使用 .toString 方法并创建我自己的 toString 方法来尝试检查数组列表是否输入正确。下面是我的 Card class 和 Arraylist{Card}Deck。下面是我的代码
package poker;
import java.util.ArrayList;
public class Card {
private String _suit;
private int _cardNum;
public Card(int cardNum, String suit) {
_suit = suit;
_cardNum = cardNum;
}
public String toString() {
return _suit +_cardNum;
}
static ArrayList<`enter code here`Card> Deck = new ArrayList<Card>() {{
add(new Card(0,"Hearts"));
add(new Card(1,"Hearts"));
add(new Card(1,"Hearts"));
add(new Card(2,"Hearts"));
add(new Card(3,"Hearts"));
add(new Card(4,"Hearts"));
add(new Card(5,"Hearts"));
add(new Card(6,"Hearts"));
add(new Card(7,"Hearts"));
add(new Card(8,"Hearts"));
add(new Card(9,"Hearts"));
add(new Card(10,"Hearts"));
add(new Card(11,"Hearts"));
add(new Card(12,"Hearts"));
add(new Card(13,"Hearts"));
add(new Card(0,"Spades"));
add(new Card(1,"Spades"));
add(new Card(2,"Spades"));
add(new Card(3,"Spades"));
add(new Card(4,"Spades"));
add(new Card(5,"Spades"));
add(new Card(6,"Spades"));
add(new Card(7,"Spades"));
add(new Card(8,"Spades"));
add(new Card(9,"Spades"));
add(new Card(10,"Spades"));
add(new Card(11,"Spades"));
add(new Card(12,"Spades"));
add(new Card(13,"Spades"));
add(new Card(0,"Clubs"));
add(new Card(1,"Clubs"));
add(new Card(2,"Clubs"));
add(new Card(3,"Clubs"));
add(new Card(4,"Clubs"));
add(new Card(5,"Clubs"));
add(new Card(6,"Clubs"));
add(new Card(7,"Clubs"));
add(new Card(8,"Clubs"));
add(new Card(9,"Clubs"));
add(new Card(10,"Clubs"));
add(new Card(11,"Clubs"));
add(new Card(12,"Clubs"));
add(new Card(13,"Clubs"));
add(new Card(0,"Diamonds"));
add(new Card(1,"Diamonds"));
add(new Card(2,"Diamonds"));
add(new Card(3,"Diamonds"));
add(new Card(4,"Diamonds"));
add(new Card(5,"Diamonds"));
add(new Card(6,"Diamonds"));
add(new Card(7,"Diamonds"));
add(new Card(8,"Diamonds"));
add(new Card(9,"Diamonds"));
add(new Card(10,"Diamonds"));
add(new Card(11,"Diamonds"));
add(new Card(12,"Diamonds"));
add(new Card(13,"Diamonds"));
}};
}
和我的 MainApp
package poker;
import java.util.Random;
import static java.lang.System.out;
public class MainApp {
public static void main(String[] args) {
for(int i = 0;i <Card.Deck.size();i++) {
out.println(Card.toString());
}
}
}
在打印行中出现了我的问题。如何将数组列表从 class 类型转换为字符串输出?
提前致谢!
由于 toString()
不是静态方法,您需要在 class 的实例上调用它。因此,将 MainApp 中的行 out.println(Card.toString());
更改为 out.println(Card.Deck.get(i).toString());
。
附带说明一下,我注意到您每套花色有 14 张牌,我认为这是无意的。
你能试试下面的方法吗?它应该会打印 ArrayList 的所有字符串内容。
System.out.println(Card.Deck);
类似
[Hearts0, Hearts1, Hearts1, Hearts2, Hearts3, Hearts4, Hearts5,
Hearts6, Hearts7, Hearts8, Hearts9, Hearts10, Hearts11, Hearts12,
Hearts13, Spades0, Spades1, Spades2, Spades3, Spades4, Spades5,
Spades6, Spades7, Spades8, Spades9, Spades10, Spades11, Spades12,
Spades13, Clubs0, Clubs1, Clubs2, Clubs3, Clubs4, Clubs5, Clubs6,
Clubs7, Clubs8, Clubs9, Clubs10, Clubs11, Clubs12, Clubs13, Diamonds0,
Diamonds1, Diamonds2, Diamonds3, Diamonds4, Diamonds5, Diamonds6,
Diamonds7, Diamonds8, Diamonds9, Diamonds10, Diamonds11, Diamonds12,
Diamonds13]
您看到的错误是什么?
我看到的最大问题是您的 for 循环没有使用索引来取消引用 Deck 数组的成员:
for(int i = 0;i <Card.Deck.size();i++) {
out.println(Card.toString());
}
卡片是 class - 不是对象。您已经创建了一堆 Card class 对象,但这不是您在该代码中引用的对象。要引用对象实例而不是 class,请执行以下操作:
你应该更换
Card.toString()
和:
Card.Deck.get(i).toString()
-- 但有更好的方法,请参见下文。
顺便说一句,您可能应该使用@Override 属性来实现toString。它可能不是绝对必要的,但清楚地表明您正在覆盖默认实现:
@Override
public String toString() {
return _suit +_cardNum;
}
正如我上面提到的,有一种更简单的方法可以打印牌组中的每张卡片:使用迭代器快捷方式 for
而不是尝试将数组列表视为数组:
public void printDeck() {
for(Card card : Card.Deck) {
out.print(card.toString());
}
}
您的 Card.toString() 没有引用 Card in Deck 对象。您要做的是从 Deck 对象打印 Card 的字符串值。如果你使用的是Java 8,你可以使用下面的代码:
Card.Deck.forEach(card -> System.out.println(card.toString()));
嗨,我正在尝试练习 java,而且才刚刚开始! 为了练习,我正在尝试构建一个简单的扑克游戏,但遇到了纸牌数组列表问题。我试图打印出来,但只有地址输出到控制台,自然我尝试使用 .toString 方法并创建我自己的 toString 方法来尝试检查数组列表是否输入正确。下面是我的 Card class 和 Arraylist{Card}Deck。下面是我的代码
package poker;
import java.util.ArrayList;
public class Card {
private String _suit;
private int _cardNum;
public Card(int cardNum, String suit) {
_suit = suit;
_cardNum = cardNum;
}
public String toString() {
return _suit +_cardNum;
}
static ArrayList<`enter code here`Card> Deck = new ArrayList<Card>() {{
add(new Card(0,"Hearts"));
add(new Card(1,"Hearts"));
add(new Card(1,"Hearts"));
add(new Card(2,"Hearts"));
add(new Card(3,"Hearts"));
add(new Card(4,"Hearts"));
add(new Card(5,"Hearts"));
add(new Card(6,"Hearts"));
add(new Card(7,"Hearts"));
add(new Card(8,"Hearts"));
add(new Card(9,"Hearts"));
add(new Card(10,"Hearts"));
add(new Card(11,"Hearts"));
add(new Card(12,"Hearts"));
add(new Card(13,"Hearts"));
add(new Card(0,"Spades"));
add(new Card(1,"Spades"));
add(new Card(2,"Spades"));
add(new Card(3,"Spades"));
add(new Card(4,"Spades"));
add(new Card(5,"Spades"));
add(new Card(6,"Spades"));
add(new Card(7,"Spades"));
add(new Card(8,"Spades"));
add(new Card(9,"Spades"));
add(new Card(10,"Spades"));
add(new Card(11,"Spades"));
add(new Card(12,"Spades"));
add(new Card(13,"Spades"));
add(new Card(0,"Clubs"));
add(new Card(1,"Clubs"));
add(new Card(2,"Clubs"));
add(new Card(3,"Clubs"));
add(new Card(4,"Clubs"));
add(new Card(5,"Clubs"));
add(new Card(6,"Clubs"));
add(new Card(7,"Clubs"));
add(new Card(8,"Clubs"));
add(new Card(9,"Clubs"));
add(new Card(10,"Clubs"));
add(new Card(11,"Clubs"));
add(new Card(12,"Clubs"));
add(new Card(13,"Clubs"));
add(new Card(0,"Diamonds"));
add(new Card(1,"Diamonds"));
add(new Card(2,"Diamonds"));
add(new Card(3,"Diamonds"));
add(new Card(4,"Diamonds"));
add(new Card(5,"Diamonds"));
add(new Card(6,"Diamonds"));
add(new Card(7,"Diamonds"));
add(new Card(8,"Diamonds"));
add(new Card(9,"Diamonds"));
add(new Card(10,"Diamonds"));
add(new Card(11,"Diamonds"));
add(new Card(12,"Diamonds"));
add(new Card(13,"Diamonds"));
}};
}
和我的 MainApp
package poker;
import java.util.Random;
import static java.lang.System.out;
public class MainApp {
public static void main(String[] args) {
for(int i = 0;i <Card.Deck.size();i++) {
out.println(Card.toString());
}
}
}
在打印行中出现了我的问题。如何将数组列表从 class 类型转换为字符串输出? 提前致谢!
由于 toString()
不是静态方法,您需要在 class 的实例上调用它。因此,将 MainApp 中的行 out.println(Card.toString());
更改为 out.println(Card.Deck.get(i).toString());
。
附带说明一下,我注意到您每套花色有 14 张牌,我认为这是无意的。
你能试试下面的方法吗?它应该会打印 ArrayList 的所有字符串内容。
System.out.println(Card.Deck);
类似
[Hearts0, Hearts1, Hearts1, Hearts2, Hearts3, Hearts4, Hearts5, Hearts6, Hearts7, Hearts8, Hearts9, Hearts10, Hearts11, Hearts12, Hearts13, Spades0, Spades1, Spades2, Spades3, Spades4, Spades5, Spades6, Spades7, Spades8, Spades9, Spades10, Spades11, Spades12, Spades13, Clubs0, Clubs1, Clubs2, Clubs3, Clubs4, Clubs5, Clubs6, Clubs7, Clubs8, Clubs9, Clubs10, Clubs11, Clubs12, Clubs13, Diamonds0, Diamonds1, Diamonds2, Diamonds3, Diamonds4, Diamonds5, Diamonds6, Diamonds7, Diamonds8, Diamonds9, Diamonds10, Diamonds11, Diamonds12, Diamonds13]
您看到的错误是什么?
我看到的最大问题是您的 for 循环没有使用索引来取消引用 Deck 数组的成员:
for(int i = 0;i <Card.Deck.size();i++) {
out.println(Card.toString());
}
卡片是 class - 不是对象。您已经创建了一堆 Card class 对象,但这不是您在该代码中引用的对象。要引用对象实例而不是 class,请执行以下操作:
你应该更换
Card.toString()
和:
Card.Deck.get(i).toString()
-- 但有更好的方法,请参见下文。
顺便说一句,您可能应该使用@Override 属性来实现toString。它可能不是绝对必要的,但清楚地表明您正在覆盖默认实现:
@Override
public String toString() {
return _suit +_cardNum;
}
正如我上面提到的,有一种更简单的方法可以打印牌组中的每张卡片:使用迭代器快捷方式 for
而不是尝试将数组列表视为数组:
public void printDeck() {
for(Card card : Card.Deck) {
out.print(card.toString());
}
}
您的 Card.toString() 没有引用 Card in Deck 对象。您要做的是从 Deck 对象打印 Card 的字符串值。如果你使用的是Java 8,你可以使用下面的代码:
Card.Deck.forEach(card -> System.out.println(card.toString()));