如何用Java生成一副卡片?

如何用Java生成一副卡片?,java,for-loop,Java,For Loop,我已经试了一次又一次,但是循环卡在了俱乐部之王的位置上。 目前,我正在尝试生成一副卡片并打印出来,以检查这副卡片是否真实 import java.util.*; import java.math.*; public class Deck extends Card{ private static Card[][]cardDeck=new Card[4][13]; int counter; public Deck (String suit, String card

我已经试了一次又一次,但是循环卡在了俱乐部之王的位置上。 目前,我正在尝试生成一副卡片并打印出来,以检查这副卡片是否真实

      import java.util.*;
      import java.math.*;
 public class Deck extends Card{

private static Card[][]cardDeck=new Card[4][13];
int counter; 



public Deck (String suit, String cardType, int value) 
{
    super(suit,cardType,value);

}

public void removeCard() 
{
    if(counter>=40)
        generateDeck();

    int Randr=(int)(Math.random()*26);
    int Randc=(int)(Math.random()*2);

    if(cardDeck[Randr][Randc]==null)
    {
        removeCard();
    }
    else
        {
        cardDeck[Randr][Randc]=null;
        counter++;
        }
}
public void print2DArray() 
{
    for(int i=0;i<cardDeck.length;i++)
    {
        for(int j=0;j<cardDeck[0].length;j++)
        {                   
            System.out.print(super.draw(cardDeck[i][j])+" "+j);
        }
        System.out.println();
    }
}



public static void generateDeck()
{

    for(int i=0; i<cardDeck.length;i++) {

        for(int j=0;j<cardDeck[0].length;j++) {

            if(i==0)
            {
                if(j==0)
                {
                    cardDeck[0][0]=new Card("Clubs","Ace",1);
                    continue;
                }
                else if(j>0&&j<10)
                {
                        cardDeck[i][j]=new Card("Clubs",""+(j+1),j+1);
                        continue;
                }
                else if(j==10)
                {
                        cardDeck[i][j]=new Card("Clubs","Jack",10);
                        continue;
                }
                else if(j==11)
                {
                        cardDeck[i][j]=new Card("Clubs","Queen",10);
                        continue;
                }
                else if(j==12)
                {
                        cardDeck[i][j]=new Card("Clubs","King",10);
                        continue;
                }
            else if(i==1)
            {
                if(j==0)
                {
                    cardDeck[1][0]=new Card("Hearts","Ace",1);
                    continue;
                }
                else if(j>0&&j<10)
                {
                        cardDeck[i][j]=new Card("Hearts",""+(j+1),j+1);
                        continue;
                }
                else if(j==10)
                {
                        cardDeck[i][j]=new Card("Hearts","Jack",10);
                        continue;
                }
                else if(j==11)
                {
                        cardDeck[i][j]=new Card("Hearts","Queen",10);
                        continue;
                }
                else if(j==12)
                {
                        cardDeck[i][j]=new Card("Hearts","King",10);
                        continue;
                }
            }
            else if(i==2)
            {
                if(j==0)
                {
                    cardDeck[2][0]=new Card("Spades","Ace",1);
                    continue;
                }
                else if(j>0&&j<10)
                {
                    cardDeck[i][j]=new Card("Spades",""+(j+1),j+1);
                    continue;
                }
                else if(j==10)
                {
                    cardDeck[i][j]=new Card("Spades","Jack",10);
                    continue;
                }
                else if(j==11)
                {   
                    cardDeck[i][j]=new Card("Spades","Queen",10);
                continue;
                }
                else if(j==12)
                {
                    cardDeck[i][j]=new Card("Spades","King",10);
                continue;
                }
            }
            else if(i==3)
            {
                if(j==0)
                {
                    cardDeck[3][0]=new Card("Diamonds","Ace",1);
                    continue;
                }
                else if(j>0&&j<10)
                {
                    cardDeck[i][j]=new Card("Diamonds",""+(j+1),j+1);
                    continue;
                }
                else if(j==10)
                {   
                    cardDeck[i][j]=new Card("Diamonds","Jack",10);
                    continue;
                }
                else if(j==11)
                {
                    cardDeck[i][j]=new Card("Diamonds","Queen",10);
                    continue;
                }

                else if(j==12)
                {
                    cardDeck[i][j]=new Card("Diamonds","King",10);
                    continue;
                }

               }    
            }
        }
                }
}
}

我的主要方法就是检查它是否可以打印

public class TestEnvironment {

public static void main(String[] args) {
    Deck x= new Deck("","",0);
    x.generateDeck();
    x.print2DArray();
}
}

这是我对前面提到的if-else语句的更新代码

import java.util.*;
导入java.math.*; 公共类卡片{

private static Card[][]cardDeck=new Card[4][13];
int counter;
public Deck (String suit, String cardType, int value) 
{
    super(suit,cardType,value);

}

public void removeCard() 
{
    if(counter>=40)
        generateDeck();

    int Randr=(int)(Math.random()*26);
    int Randc=(int)(Math.random()*2);

    if(cardDeck[Randr][Randc]==null)
    {
        removeCard();
    }
    else
        {
        cardDeck[Randr][Randc]=null;
        counter++;
        }
}
public void print2DArray() 
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<cardDeck[0].length;j++)
        {   
            System.out.print(i);
            //System.out.println(super.draw(cardDeck[i][j])+"     "+i+","+j);
        }
    System.out.println();
    }
}



public static void generateDeck()
{   int value=0;
    String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
    String[] ranks = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};

    for (int i=0;i<suits.length;i++) 

        for (int j=0;j<ranks.length;j++) 
        {   
            cardDeck[i][j] = new Card(suits[i],ranks[j],value);
            if(j>9)
            value =10;
            else
            value=j+1;

            cardDeck[i][j] = new Card(suits[i],ranks[j],value);        
        }
private static Card[]cardDeck=新卡[4][13];
整数计数器;
公共甲板(字符串套装、字符串卡片类型、int值)
{
超级(套装、卡片类型、价值);
}
公共无效删除卡()
{
如果(计数器>=40)
generateDeck();
int Randr=(int)(Math.random()*26);
int Randc=(int)(Math.random()*2);
if(cardDeck[Randr][Randc]==null)
{
移除卡片();
}
其他的
{
cardDeck[Randr][Randc]=null;
计数器++;
}
}
public void print2DArray()
{
对于(int i=0;i
  • 不要使用2D数组,而是使用ArrayList来存放卡片
  • 然后创建两个循环,将这些卡添加到ArrayList中。外部循环将迭代4套卡,内部循环将为每套卡添加13张卡
  • 然后,您可以使用
    Collections.shuffle()
    在ArrayList中洗牌
  • 要玩一张牌,只需从ArrayList中移除牌0
  • 编辑:

    但这个循环被卡在了俱乐部之王的身上

    您的
    generateCards()
    方法使用了太多的if/else语句来生成卡片。很难注意到哪个if/else语句可能导致了问题

    您可以通过使用数组和循环来简化代码

    比如:

    String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
    String[] ranks = {"Ace", "2", "3", ... , "Jack", "Queen", "King"};
    
    for (each suit) // assume i is the index
        for (each rank) // assume j is the index
        {
            int value = (j < 10) ? 10 : j;
            cardDeck[i][j] = new Card(...);        
        }
    }
    

    不要使用静态变量。static关键字意味着Card类的所有实例将共享相同的值。

    当系统要求您改进问题时……因为它认为您可能需要太多的代码而没有足够的文本,添加了这些无用的“垃圾字符”…只会惹恼你的读者。让你否决投票,关闭投票,删除投票。你最好快速删除这些,然后阅读以改进你的问题。投票给QWRWQTWQRTEWQTFqWTerqtyerqytreqytryqtwerqyteryqtryqtweryqtryqtryqtwerqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtryqtwerqtryqtryqtryqtryqtryqtryqtryqtryqtryq{
    。卡片组不是卡片。卡片组由卡片组成,但它不是卡片。除此之外,您已经得到了答案:您应该在此处使用枚举,而不是字符串。为套件创建一个枚举,为卡片类型创建一个枚举。然后您将代码减少到……嗯,更不用说:发布代码时,请确保选择所有代码,然后单击 {}按钮。然后代码将缩进4个空格,并将正确高亮显示。这是一个类,我的老师希望我们使用2d数组作为一组cards@Sai,每当您有这么多嵌套的if/else语句时,您就需要寻找更好的方法来编写代码,并使代码更干净。请参阅编辑以获得一种方法。我尝试了code,但现在它被困在国王的铁锹里了。提示:当给出所有这些提示时……还要提到核心问题:不要使用原始类型,而是使用枚举。一个用于套件,一个用于卡片类型。减少代码库中可怕的不必要复杂性的关键是使用更好的抽象。@Sai,
    它被困在国王的铁锹里了。
    -不确定这意味着什么。黑桃王将是你创建的最后一张卡,因此我想说你的代码已经完成。无论如何,你仍然没有删除问题中的所有垃圾字符,并且你还没有更新代码以发布正确的显示当前代码的代码,因此我无法提供更多帮助。
    String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
    String[] ranks = {"Ace", "2", "3", ... , "Jack", "Queen", "King"};
    
    for (each suit) // assume i is the index
        for (each rank) // assume j is the index
        {
            int value = (j < 10) ? 10 : j;
            cardDeck[i][j] = new Card(...);        
        }
    }
    
    private static String suit;
    private static int numVal;
    private static String cardType;