【问题标题】:Arraylist of objects to Array of strings对象数组列表到字符串数组
【发布时间】:2014-07-27 22:51:23
【问题描述】:

我正在尝试转换包含“卡片”或存储两个数字、等级和套装的对象的 ArrayList。通常要获取卡片的单个实例,我使用:

dealer.dealerhand.get(1).showstats();

其中 showstats 返回一个字符串并且是:

public String showstats()
{
    String realsuit = "";
    if(this.suit == 0)
    {
        realsuit = "Diamonds";
    }
    else if(this.suit == 1)
    {
        realsuit ="Hearts";
    }
    else if(this.suit == 2)
    {
        realsuit = "Clubs";
    }
    else if(this.suit == 3)
    {
        realsuit = "Spades";
    }
    String str = "My rank is: " + this.rank + " My Suit is: " + realsuit;
    return str;
}

到目前为止我尝试过的是:

 public String[] getStats()
{
    String[] dealerstats = this.dealerhand.toArray(new String[this.dealerhand.size()]);
    return dealerstats;
}

 public String[] getStats()
{
    String[] dealerstats = {""};
    for(int i = 0; i < this.dealerhand.size(); i++)
    {
        dealerstats[i] = (dealerhand.get(i).showstats());
    }
    return dealerstats;
}

但它们都不起作用。最终目标将是发牌手 ArrayList 中卡片的字符串数组,我将使用 JList 打印出来。谢谢!

【问题讨论】:

  • 你尝试过的东西有什么用?
  • 最后一部分似乎是正确的,你得到错误了吗?
  • 它抛出:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: BlackJack.Dealer.getStats(Dealer.java:124) 的 BlackJack.Dealer.main(Dealer.java:150) 的 1第124行是dealerstats[i] = (dealerhand.get(i).showstats());

标签: java arrays oop arraylist


【解决方案1】:

如果您在 Card 类中定义了 toString() 方法,则可以打印出 ArrayList 而无需任何转换 (Live Ideone Example here):

public class Card{
    ...
    @Override public String toString(){
        return "My rank is: " + this.rank + " My Suit is: " + this.suit;
    }
}

然后你可以使用:

List<Card> dealerCards = new ArrayList<Card>();
dealerCards.add(new Card(5, "Hearts"));
dealerCards.add(new Card(10, "Diamonds"));

System.out.println(dealerCards);

输出: ["My rank is: 5 My Suit is: Hearts", "My rank is: 10 My Suit is: Diamonds"]

【讨论】:

  • 其实这非常有帮助。我继续使用 kevinrmannix 的解决方案,但我会尝试一下。
  • 没问题。如果您想要更面向对象的方法,从长远来看,这将提高代码的清晰度和长度。
【解决方案2】:

为此:

 public String[] getStats() {
    for(int i = 0; i < this.dealerhand.size(); i++) {
        dealerstats[i] = (dealerhand.get(i).showstats());
    }
    return dealerstats;
}

确保初始化您的字符串数组,如下所示:

 public String[] getStats(Dealer dealer) { // Input a dealer
    String[] dealerstats = new String[dealer.dealerhand.size()]; // Initialize String array
    for(int i = 0; i < this.dealerhand.size(); i++) {
        dealerstats[i] = dealerhand.get(i).showstats();
    }
    return dealerstats;
}

我还假设您有一个 Dealer 对象,因为您似乎在问题中引用了一个对象。

【讨论】:

  • 谢谢,当我将它打印到控制台时,它给了我 [Ljava.lang.String;@56f7ce53。这似乎是一个愚蠢的错误
  • @user3413170 您正在打印地址。你是怎么打印出来的?
  • System.out.println(dealer.getStats());这只是为了测试该方法是否真的有效。我需要在控制器类中调用它,所以最终它会在 JFrame 中结束。
  • 它可以工作,并使用我的 JFrame 控制器显示正确的信息。非常感谢!
【解决方案3】:

您的第二次尝试几乎是正确的。您创建了数组,但没有给它正确的大小。 String[] dealerstats 的大小应该是 ArrayList dealerhand 的大小:

public String[] getStats()
{
    String[] dealerstats = new String[ dealerhand.size() ];

    for( int i = 0; i < dealerstats.length; ++i )
         dealerstats[i] = dealerhand.get(i).showstats();

    return dealerstats;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2017-08-27
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多