Java 如何为面向对象编程的int数组编写toString()方法?
如何为int数组编写toString()方法?是否返回52个卡片组的字符串表示形式 以下是作为类的一部分的示例数组:Java 如何为面向对象编程的int数组编写toString()方法?,java,arrays,oop,tostring,Java,Arrays,Oop,Tostring,如何为int数组编写toString()方法?是否返回52个卡片组的字符串表示形式 以下是作为类的一部分的示例数组: { int[] cards = new int[52]; public void Deck() { // Setting up array String[] suits = {"SPADES", "CLUBS", "HEARTS", "DIAMONDS"}; String[] ranks = {"TWO",
{
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()方法,编写如下:
return getClass().getName() + "[suits[]= " + suits[] + "ranks[]= " + ranks[] + "]";
这与我在其他值中使用的toString()方法相同,并且它正常工作。虽然现在我得到了这两个(或至少第一个)的错误:
至于打印它,我希望它被格式化为列表或网格。如果你想做得更糟糕,你应该创建一个新的类
卡
Card
类必须包含suit
和rank
字段(类型可以是此处的一个)。
确保
Card
覆盖toString()
,并确保Deck
中的数组是Card[]
(而不是int[]
)
现在,您可以通过调用轻松实现toString()
,这将依次调用每个Card
对象的toString()
至于您的代码(稍后添加):
不会编译,因为cards[]
不是值-cards
是值,但它不会得到您想要的。数组的toString()
不会生成数组的内容,您应该使用Array.toString(cards)
但是,我建议重新设计答案开头所述的代码。我将使用enum
作为西装和面值,而不是使用字符串。卡片将是一种组合,这将使打印更容易。顺便说一句,如果您使用此模式,您的IDE可以为您生成一个toString()
。@SeanOwen请参见顶部的编辑,我只需要列表或网格形式的标准字符串表示形式。@PeterLawrey我已经在同一个包中的一个单独类中使用了suit和rank作为枚举,但它们已被标记为整数,不是字符串。每个enum
都有一个name()
方法,它是名称的字符串表示形式。你是如何在没有字符串的情况下使用enum
的?@PeterLawrey嗯,我在enum
方法本身中没有name()
方法。它们所拥有的只是int值
,以及在getValue()
中返回它们的方法。我确实使用了像钻石(1)
这样的东西,但这就是它的作用。你想让我建立一个枚举吗?我真的没有时间重新设计整个代码,但我已经插入了数组。toString(cards)
,我不再有任何错误。我可能会在toString()方法中插入一种将数组打印出来的方法来完成它。
return getClass().getName() + "[suits[]= " + suits[] + "ranks[]= " + ranks[] + "]";
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
return getClass().getName() + "[cards[]= " + cards[] + "]";