Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中打印嵌套在数组中的对象_Java_Arrays_Object_Nested - Fatal编程技术网

如何在java中打印嵌套在数组中的对象

如何在java中打印嵌套在数组中的对象,java,arrays,object,nested,Java,Arrays,Object,Nested,我正在创建的纸牌游戏程序应该提示用户输入玩家数量和每手牌数,然后洗牌,然后发牌,然后显示每手牌。它将显示所有玩家的手牌,除非牌组中没有足够的牌(我们不能从52张牌组中处理10手7张牌) 我创建了一个Card类、一个Deck类、一个Hand类和驱动程序来运行这个程序。由于这是一个赋值,我必须遵守给定的规则,因此我只能使用数组,不能使用数组列表。我的问题是,我不知道如何打印手对象中的卡片对象,手数组中的卡片对象。也许还有更好的方法,但我仅限于允许导入/使用的内容。关于在嵌套数组中的何处查找打印对象,

我正在创建的纸牌游戏程序应该提示用户输入玩家数量和每手牌数,然后洗牌,然后发牌,然后显示每手牌。它将显示所有玩家的手牌,除非牌组中没有足够的牌(我们不能从52张牌组中处理10手7张牌)

我创建了一个Card类、一个Deck类、一个Hand类和驱动程序来运行这个程序。由于这是一个赋值,我必须遵守给定的规则,因此我只能使用数组,不能使用数组列表。我的问题是,我不知道如何打印手对象中的卡片对象,手数组中的卡片对象。也许还有更好的方法,但我仅限于允许导入/使用的内容。关于在嵌套数组中的何处查找打印对象,可以获得一些帮助吗?由于没有对象名,我无法使用在Hand类中编写的方法向数组中的Hands添加卡片

EDIT:我让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());
        }*/
    }
}
导入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当前位置那种做法违背了