Как создать колоду карт на Java? - PullRequest
0 голосов
/ 19 мая 2018

Я пробовал снова и снова, но петля застряла у короля дубинок.в настоящее время я пытаюсь создать колоду карт и распечатать ее, чтобы проверить, действительно ли колода создана.

      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;
                }

               }    
            }
        }
                }
}

}

мой класс карт - это просто базовый класс с несколькимиget методы

public class Card {


private static String suit;
private static int numVal;
private static String cardType;

public Card(String s,String cT, int val) {
    suit=s;
    numVal=val;
    cardType=cT;
}
public String draw(Card card) {

    return "Your card is "+card.getSuit()+" "+card.getCardType()+" its value is "+card.getValue();
}

public static String getSuit()
{
    return suit;
}
public static String getCardType()
{
    return cardType;
}
public static int getValue()
{
    return numVal;
}

}

мой основной метод - просто проверить, будет ли он печатать

public class TestEnvironment {

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

}

вот мой обновленный код дляВышеупомянутые операторы if else

import java.util.*;

import 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);        
        }

1 Ответ

0 голосов
/ 19 мая 2018
  1. Не используйте 2D-массив.Вместо этого используйте ArrayList для хранения карт.
  2. Затем вы создаете две петли для добавления карт в ArrayList.Внешний цикл перебирает 4 масти, а внутренний цикл добавляет 13 карт для каждой масти.
  3. Затем вы можете использовать Collections.shuffle(), чтобы перетасовать карты в ArrayList.
  4. сыграть карту, вы просто удалите карту 0 из ArrayList.

Редактировать:

но петля застряла у короля треф.

Ваш метод generateCards() использует слишком много операторов if / else для генерации карт.Трудно заметить, какой оператор if может вызвать проблему.

Вы можете упростить код, используя массивы и циклы.

Что-то вроде:

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(...);        
    }
}

Редактировать 2:

он застрял в лопатах королей

Я предполагаю, что ваша проблема в следующем:

private static String suit;
private static int numVal;
private static String cardType;

Донне использовать статические переменные.Ключевое слово Static означает, что все экземпляры класса Card будут иметь одинаковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...