如何在java中打印嵌套在数组中的对象
我正在创建的纸牌游戏程序应该提示用户输入玩家数量和每手牌数,然后洗牌,然后发牌,然后显示每手牌。它将显示所有玩家的手牌,除非牌组中没有足够的牌(我们不能从52张牌组中处理10手7张牌) 我创建了一个Card类、一个Deck类、一个Hand类和驱动程序来运行这个程序。由于这是一个赋值,我必须遵守给定的规则,因此我只能使用数组,不能使用数组列表。我的问题是,我不知道如何打印手对象中的卡片对象,手数组中的卡片对象。也许还有更好的方法,但我仅限于允许导入/使用的内容。关于在嵌套数组中的何处查找打印对象,可以获得一些帮助吗?由于没有对象名,我无法使用在Hand类中编写的方法向数组中的Hands添加卡片 EDIT:我让Hand类中的构造函数在传递给它的int上创建一个手大小。令人困惑的是,当我从用户那里得到有多少玩家确实在玩游戏时,我在驱动程序中创建了一个类型为Hand的数组,其中使用循环填充了新的Hand对象。此时,我不知道如何引用每个单独的手对象,以便使用toString()打印内容。他们似乎没有名字 代码如下:如何在java中打印嵌套在数组中的对象,java,arrays,object,nested,Java,Arrays,Object,Nested,我正在创建的纸牌游戏程序应该提示用户输入玩家数量和每手牌数,然后洗牌,然后发牌,然后显示每手牌。它将显示所有玩家的手牌,除非牌组中没有足够的牌(我们不能从52张牌组中处理10手7张牌) 我创建了一个Card类、一个Deck类、一个Hand类和驱动程序来运行这个程序。由于这是一个赋值,我必须遵守给定的规则,因此我只能使用数组,不能使用数组列表。我的问题是,我不知道如何打印手对象中的卡片对象,手数组中的卡片对象。也许还有更好的方法,但我仅限于允许导入/使用的内容。关于在嵌套数组中的何处查找打印对象,
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());
}*/
}
}
导入java.util.array;
导入java.util.Scanner;
公共类卡片驱动器{
公共静态void main(字符串[]args)
{
卡片c1=新卡片();//创建新卡片对象
扫描仪kb=新扫描仪(System.in);
int卡;
国际球员;
System.out.print(“游戏中有多少玩家?”);
players=Integer.parseInt(kb.nextLine());
System.out.print(“\n每个玩家将发多少张牌?”);
cards=Integer.parseInt(kb.nextLine());
而((纸牌*玩家)>52)
{
System.out.print(“牌组中没有足够的牌进行交易”+
玩家+“手牌+牌+”牌。再试一次。“);
System.out.print(“游戏中有多少玩家?”);
players=Integer.parseInt(kb.nextLine());
System.out.print(“\n每个玩家将发多少张牌?”);
cards=Integer.parseInt(kb.nextLine());
}
Deck readyDeck=new Deck();//创建新的Deck
readyDeck.shuffleDeck();//使用Java.Util.Random洗牌新构建的牌组
手牌[]玩家手牌=新手牌[玩家];//创建另一个阵列以容纳所有玩家手牌
对于(int index=0;index /*对于(int index2=0;index2假设您已经覆盖了上述每个类的toString
方法,那么打印出数组应该像调用arrays.toString()
方法一样简单(而不仅仅是将数组引用传递给System.out.println()
及其变体)
如果您想知道这是如何处理嵌套数组的,那么Deck类的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
方法,打印数组应该像调用arrays.toString()
方法一样简单(而不仅仅是将数组引用传递给System.out.println()
及其变体
如果您想知道这是如何处理嵌套数组的,那么Deck类的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);
}
}
顺便说一句,我认为你应该枚举等级和等级,而不是乱搞整数。我应该说那会更干净。要覆盖它,你可以在较新版本的Eclipse中使用新向导,或者使用我曾经编写过的插件。要覆盖它,你可以在ewer版本的Eclipse或使用我曾经编写过的插件。正如Sanjay建议的那样,您应该将其添加到您的Card类中:
@Override
public String toString() {
...
}
然后,只要使用cardinstance.toString()
即可打印卡对象,无论它位于何处
我不知道您想要完成什么,但这里有一个很好的java编程示例(用于创建Texas Hold Em)
检查一下这个,看看它是如何正确完成的,你就可以玩任何纸牌游戏了。正如Sanjay建议的那样,你应该将它添加到你的纸牌类中:
@Override
public String toString() {
...
}
然后,只要使用cardinstance.toString()
即可打印卡对象,无论它位于何处
我不知道您想要完成什么,但这里有一个很好的java编程示例(用于创建Texas Hold Em)
检查一下,看看它是如何正确完成的,你就可以玩任何纸牌游戏了。我不明白…问题是什么?:-\但我会回答“覆盖到字符串”方法…这是最有可能的答案。我不明白…问题是什么?:-\但我会回答“覆盖到字符串”方法…这是最有可能的答案。我的问题是,我不知道传递给toString方法的是什么,因为我没有卡或手对象的实际名称。它们是在循环中创建的,我可能缺少一些东西。@sudoshakes:我想你对toString
方法的使用感到困惑;请参阅我更新的答案。我使用的是enums,但传递给该方法的int被mod divide以获得enum@sudoshakes当前位置那种做法违背了