如何在java中打印嵌套在数组中的对象
我创建的纸牌游戏程序应提示用户输入玩家人数以及每只手中有多少张牌,然后洗牌,然后交易牌,然后显示牌在每个球员手中。除非卡组中没有足够的卡牌(我们不能在52张卡组中处理10张10张卡牌),否则它会为所有玩家显示手牌。如何在java中打印嵌套在数组中的对象
我已经创建了Card类,Deck类,Hand类和驱动程序来运行程序。由于这是一项任务,我必须遵守规定,所以我只允许使用数组,而不是数组列表。我的问题是,我无法弄清楚如何在Hand对象内部打印Card对象。还有一种更好的方法可以做到这一点,但我仅限于允许导入/使用的内容。我可以获得有关在嵌套数组内寻找打印对象的帮助吗?由于没有对象名称,我无法使用Hand类中编写的方法将数组添加到数组中的Hands中。
编辑︰我有Hand类中的构造函数创建一个手传递给它的int大小。令人困惑的是,当我得到有多少玩家确实在玩用户游戏时,我在驱动程序中创建了一个类型为Hand的数组,该数组中充满了使用循环的新Hand对象。那时我不知道如何引用每个单独的手对象,所以我可以使用toString()打印内容。他们似乎没有名字。
代码遵循:
import java.util.Arrays;
import java.util.Scanner;
public class CardsDriver {
public static void main(String[] args)
{
Card c1 = new Card(); //create new card object
Scanner kb = new Scanner(System.in);
int cards;
int players;
System.out.print("How many players are in the game?");
players = Integer.parseInt(kb.nextLine());
System.out.print("\nHow many cards will be dealt to each player?");
cards = Integer.parseInt(kb.nextLine());
while ((cards * players) > 52)
{
System.out.print("There are not enough cards in the deck to deal " +
players + " hands of " + cards + " cards. try again.");
System.out.print("How many players are in the game?");
players = Integer.parseInt(kb.nextLine());
System.out.print("\nHow many cards will be dealt to each player?");
cards = Integer.parseInt(kb.nextLine());
}
Deck readyDeck = new Deck(); //create new deck
readyDeck.shuffleDeck(); //shuffle the newly built deck using Java.Util.Random
Hand[] playerHands= new Hand[players]; //create another array to hold all player hands
for(int index =0; index < playerHands.length; index++)
{
playerHands[index] = new Hand(cards); //create hand object for each player of the size input by the player
/*for (int index2 =0; index2<cards;index2++)
{
//fill each hand with cards using addcard somehow. i have no object name.
Hand.addCard(readyDeck.dealACard());
}*/
}
}
假设你已经覆盖每一个提到的类的toString
方法,打印出阵列应尽可能调用Arrays.toString()
方法(而不是仅仅传递数组引用一样简单System.out.println()
及其变种。
如果你想知道如何处理这种嵌套的数组,甲板类的toString()
方法会涉及调用卡阵列上的Arrays.toString
方法。
例子:
class Card {
int suit, rank;
@Override
public String toString() {
// outputs something like ACE of SPADE
return suitToName(suit) + " of " + rankToName(rank);
}
}
class Deck {
private Card[] cards;
private String name;
@Override
public String toString() {
// prints : MyDeck -> [ACE of SPADE, ACE of HEART] etc.
return name + " -> " + Arrays.toString(cards);
}
}
顺便说一句,我认为你应该为枚举排名和西装,而不是整数乱搞。这应该是更清洁我应该说。
我遇到的问题是我很困惑要传递给toString方法,因为我没有卡或手对象的实际名称。它们是在循环中创建的,我可能会错过一些东西。 – sudoshakes 2011-03-06 16:37:56
@sudoshakes:我认为你对使用'toString'方法感到困惑;看到我更新的答案。 – 2011-03-06 16:48:57
我正在使用枚举,但传递给该方法的整数是mod分割得到一个枚举 – sudoshakes 2011-03-06 17:16:21
要覆盖它,您可以在较新版本的Eclipse中使用新向导,也可以使用我曾写过的插件,如JUtils ToString Generator。
我意识到我cna重写toString()方法,我不知道如何使用Hand对象中Hand对象中的卡片。 – sudoshakes 2011-03-06 16:44:10
为桑杰建议你应该添加到您的卡类:
@Override
public String toString() {
...
}
就用cardinstance.toString()
,每当你想打印卡的对象,无论它在哪里。
我不知道你在做什么,但这里是一个很好的Java编程例子(用于创建Texas Hold Em)。
http://code.google.com/p/texasholdem-java/source/checkout
结帐这个看其如何处理得当,你是好去与任何的纸牌游戏。
Card类的构造函数使用pass整数创建卡片,并使用mod除法来返回枚举的脸部和套装类型的序数值。 – sudoshakes 2011-03-06 16:39:30
哎呦打得太快。然后我有Hand类中的构造函数,根据传递给它的int值创建一个大小。令人困惑的是,当我得到有多少玩家确实在玩游戏时,我在驱动程序中创建了一个类型为Hand的数组,它使用循环充满了新的Hand对象。那时我不知道如何引用每个单独的手对象,所以我可以使用toString()打印内容。 – sudoshakes 2011-03-06 16:41:53
@sudoshakes对不起,现在没有多少时间,你可以在调试模式下捕捉它吗? – ant 2011-03-06 17:06:59
我不明白......这个问题是怎么回事? : - \但我会回答“覆盖toString”的方法....这是最有可能的答案。 – st0le 2011-03-06 16:10:29