如何用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{
。卡片组不是卡片。卡片组由卡片组成,但它不是卡片。除此之外,您已经得到了答案:您应该在此处使用枚举,而不是字符串。为套件创建一个枚举,为卡片类型创建一个枚举。然后您将代码减少到……嗯,更不用说:发布代码时,请确保选择所有代码,然后单击它被困在国王的铁锹里了。
-不确定这意味着什么。黑桃王将是你创建的最后一张卡,因此我想说你的代码已经完成。无论如何,你仍然没有删除问题中的所有垃圾字符,并且你还没有更新代码以发布正确的显示当前代码的代码,因此我无法提供更多帮助。
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;