【问题标题】:How do you write a toString() method for an int array for object oriented programming?如何为面向对象编程的 int 数组编写 toString() 方法?
【发布时间】:2015-02-23 11:33:36
【问题描述】:

如何为 int 数组编写 toString() 方法?说要返回一个 52 卡包的字符串表示?

这是一个作为类的一部分的示例数组:

{
    int[] cards = new int[52];

    public void Deck()
    {
        // Setting up array
        String[] suits = {"SPADES", "CLUBS", "HEARTS", "DIAMONDS"};
        String[] ranks = {"TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", 
            "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING", "ACE"};
        {
            // Initalising array
            for (int i = 0; i < cards.length; i++)
            {
                cards[i] = i;
            }
        }
    }

这是以面向对象的方式完成的。在这种情况下如何编写 toString() 方法以返回表示纸牌包的字符串表示,或者在这种情况下返回数组?

我目前使用过:

@Overide
public String toString()
{
    return getClass().getName() + "[cards[]= " + cards[] + "]";
}

我也使用了类似的 toString() 方法,写成:

return getClass().getName() + "[suits[]= " + suits[] + "ranks[]= " + ranks[] + "]";

这与我用于其他值的 toString() 方法相同,它通常可以工作。虽然现在我都得到了这个错误(或者至少是第一个):

cannot find symbol
symbol: Class cards //which I dont have other than the array at the top
location: Class Pack // The class the array is currently in

unexpected type
required: value
found: class

'.class.' expected

至于打印,我希望将其格式化为列表或网格。

【问题讨论】:

  • 我不会使用字符串,而是使用enum 来表示花色和面值。卡片将是一个组合,这将使打印更容易。顺便说一句,如果您使用此模式,您的 IDE 可以为您生成 toString()
  • @SeanOwen 看到顶部的编辑,我只想要一个列表或网格形式的标准字符串表示。
  • @PeterLawrey 我已经在同一个包中的一个单独的类中使用了 suit 和 rank 作为枚举,但它们已经被计算为整数,而不是字符串。
  • 每个enum 都有一个name() 方法,它是名称的字符串表示形式。你是如何在没有字符串的情况下使用 enum 的?
  • @PeterLawrey 好吧,我在 name() 方法本身中没有 name() 方法。他们所拥有的只是int values 以及返回它们的方法,如getValue()。我确实使用DIAMONDS(1) 之类的东西,但仅此而已。你想让我放一个我的枚举吗?

标签: java arrays oop tostring


【解决方案1】:

如果你想做更多的OOPish,你应该创建一个新类Card

Card 类必须包含suitrank 字段(此处的类型可以是enum)。
确保Card 覆盖toString(),并确保Deck 中的数组是Card[](而不是int[])。

现在您可以通过调用Arrays.toString() 轻松实现toString(),这将依次调用每个Card 对象的toString(),从而生成所需的套牌表示。


至于你的代码(后来添加的):

return getClass().getName() + "[cards[]= " + cards[] + "]";

不会编译,因为 cards[] 不是一个值 - cards 是,但它不会得到你想要的。数组的toString() 不会产生array, and you should use Arrays.toString(cards) 的内容。

但是,我建议按照此答案开头所述重新设计代码。

【讨论】:

  • 我真的没有时间重新设计整个代码,但是我插入了Arrays.toString(cards),我不再有任何错误。我可能会在 toString() 方法中插入一种将数组打印出来的方法来完成它。
猜你喜欢
  • 2010-09-18
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多