简体   繁体   English

转换 ArrayList<object> 串起来<div id="text_translate"><p>嗨,我正在尝试练习 java,我才刚刚开始。 为了练习,我正在尝试构建一个简单的扑克游戏,但遇到了卡片数组列表,我正在尝试将其打印出来,但只有控制台的地址是 output。 自然我尝试使用.toString 方法并创建我自己的toString 方法来尝试检查数组列表是否输入正确。 Bellow 是我的卡片 class 和 Arraylist{Card}Deck。 贝娄是我的代码</p><pre>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&lt;`enter code here`Card&gt; Deck = new ArrayList&lt;Card&gt;() {{ 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")); }}; }</pre><p> 和我的 MainApp</p><pre> 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 &lt;Card.Deck.size();i++) { out.println(Card.toString()); } } }</pre><p> 在打印行中是我的问题发生的地方。 如何将 arraylist 从 class 类型转换为用于输出的字符串? 提前致谢!</p></div></object>

[英]Convert ArrayList<Object> to string

Hi i am trying to practice java and am just getting started.嗨,我正在尝试练习 java,我才刚刚开始。 To practice i am attempting to build a simple poker game but have gotten stuck with the Array List of cards, I am trying to print it out but only the address is output to the console.为了练习,我正在尝试构建一个简单的扑克游戏,但遇到了卡片数组列表,我正在尝试将其打印出来,但只有控制台的地址是 output。 naturally i have tried to use the.toString method and create my own toString method to try and check if the array list is inputted correctly.自然我尝试使用.toString 方法并创建我自己的toString 方法来尝试检查数组列表是否输入正确。 Bellow is my Card class with an Arraylist{Card}Deck. Bellow 是我的卡片 class 和 Arraylist{Card}Deck。 Bellow is my Code贝娄是我的代码

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"));
    }};
}

and my MainApp和我的 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());

        }
    }
}

In the print line is where my problem occurs.在打印行中是我的问题发生的地方。 How do i convert the arraylist from the class type to a string for outputting?如何将 arraylist 从 class 类型转换为用于输出的字符串? Thanks in advance!提前致谢!

Since toString() is not a static method, you need to call it on an instance of a class.由于toString()不是 static 方法,因此您需要在 class 的实例上调用它。 So, change the line out.println(Card.toString());因此,更改行out.println(Card.toString()); to out.println(Card.Deck.get(i).toString()); to out.println(Card.Deck.get(i).toString()); in your MainApp.在您的 MainApp 中。

On a side note, I notice you have 14 cards per suit, which I assume is unintentional.在旁注中,我注意到你每套有 14 张牌,我认为这是无意的。

Can you try the below it should print all the String contents of the ArrayList.你可以试试下面它应该打印 ArrayList 的所有字符串内容。

System.out.println(Card.Deck); 

Something like就像是

[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] [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 , 黑桃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]

What is the error you are seeing?您看到的错误是什么?

The biggest problem I am seeing is that your for-loop is not using the index to dereference the members of your Deck array:我看到的最大问题是你的 for 循环没有使用索引来取消引用 Deck 数组的成员:

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

        }

Card is a class - not an object.卡是 class - 不是 object。 You have created a bunch of object of the Card class, but that is not what you are referencing in that code.您已经创建了卡 class 的一堆 object,但这不是您在该代码中引用的内容。 To reference the object instances instead of the class, do this: You should replace Card.toString() with: Card.Deck.get(i).toString() -- but there is a better way to do this, see below.要引用 object 实例而不是 class,请执行以下操作:您应该将Card.toString()替换为: Card.Deck.get(i).toString() - 但有更好的方法可以做到这一点,见下文。

As an aside, You should probably use the @Override attribute for your implementation of toString.顺便说一句,您可能应该使用 @Override 属性来实现 toString。 It probably isn't strictly necessary but makes it clear that you are overriding the default implementation:这可能不是绝对必要的,但可以清楚地表明您正在覆盖默认实现:

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

As I mentioned above, there is an easier way to print each card in the deck: use the iterator shortcut for instead of trying to treat the arraylist like an array:正如我上面提到的,有一种更简单的方法可以打印卡片组中的每张卡片:使用迭代器快捷for代替尝试将 arraylist 视为数组:

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

Your Card.toString() is not referencing to a Card in Deck object.您的 Card.toString() 没有引用 Deck object 中的卡片。 What you want to do is print the string value of the Card from the Deck Object.您要做的是从 Deck Object 打印卡片的字符串值。 If you are using Java 8, you can use below code:如果您使用的是 Java 8,您可以使用以下代码:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM