【问题标题】:Convert ArrayList<Object> to string将 ArrayList<Object> 转换为字符串
【发布时间】:2019-11-21 02:37:22
【问题描述】:

您好,我正在尝试练习 java 并且刚刚开始! 为了练习,我正在尝试构建一个简单的扑克游戏,但被卡的数组列表卡住了。我正在尝试将其打印出来但只有地址输出到控制台,自然我尝试使用 .toString 方法并创建自己的 toString 方法来尝试检查数组列表是否输入正确。 Bellow 是我的 Card 类,带有 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());

        }
    }
}

在打印行是我的问题发生的地方。如何将数组列表从类类型转换为字符串以进行输出? 提前致谢!

【问题讨论】:

  • ArrayList 有 toString() 函数

标签: java arraylist tostring


【解决方案1】:

由于toString() 不是静态方法,您需要在类的实例上调用它。因此,在 MainApp 中将 out.println(Card.toString()); 行更改为 out.println(Card.Deck.get(i).toString());

顺便说一句,我注意到您每套花色有 14 张牌,我认为这是无意的。

【讨论】:

  • 是的,我只是想在我花时间更正列表之前弄清楚字符串的情况!谢谢!
【解决方案2】:

您看到的错误是什么?

我看到的最大问题是你的 for 循环没有使用索引来取消引用你的 Deck 数组的成员:

for(int i = 0;i <Card.Deck.size();i++) {
            out.println(Card.toString());

        }

Card 是一个类,而不是一个对象。您已经创建了一堆 Card 类的对象,但这不是您在该代码中引用的对象。要引用对象实例而不是类,请执行以下操作: 你应该更换 Card.toString() 和: Card.Deck.get(i).toString() -- 但是有更好的方法可以做到这一点,见下文。

顺便说一句,您可能应该使用@Override 属性来实现toString。这可能不是绝对必要的,但可以清楚地表明您正在覆盖默认实现:

    @Override
    public String toString() {
        return _suit +_cardNum;
    }

正如我上面提到的,有一种更简单的方法可以打印卡片组中的每张卡片:使用迭代器快捷方式 for 而不是尝试将 arraylist 视为数组:

    public void printDeck() {
        for(Card card : Card.Deck) {
            out.print(card.toString());
        }
    }

【讨论】:

  • 完美!这真的很有帮助!谢谢!
  • 你能接受我的答案吗?谢谢!
【解决方案3】:

你可以试试下面它应该打印 ArrayList 的所有字符串内容。

System.out.println(Card.Deck); 

类似

[Hearts0, Hearts1, Hearts1, Hearts2, Hearts3, Hearts4, Hearts5, Hearts6,Hearts7,Hearts8,Hearts9,Hearts10,Hearts11,Hearts12, 红心13,黑桃0,黑桃1,黑桃2,黑桃3,黑桃4,黑桃5, 黑桃6,黑桃7,黑桃8,黑桃9,黑桃10,黑桃11,黑桃12, 黑桃13,俱乐部0,俱乐部1,俱乐部2,俱乐部3,俱乐部4,俱乐部5,俱乐部6, 俱乐部7,俱乐部8,俱乐部9,俱乐部10,俱乐部11,俱乐部12,俱乐部13,钻石0, 钻石1,钻石2,钻石3,钻石4,钻石5,钻石6, 钻石7,钻石8,钻石9,钻石10,钻石11,钻石12, 钻石13]

【讨论】:

    【解决方案4】:

    您的 Card.toString() 没有引用 Deck 对象中的卡片。您要做的是从 Deck 对象中打印 Card 的字符串值。如果您使用的是 Java 8,则可以使用以下代码:

    Card.Deck.forEach(card -&gt; System.out.println(card.toString()));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 2019-09-04
      • 2012-12-27
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多