Java 一副牌洗牌
我试图在我的Pack类中测试我的两个函数,以模拟一副牌Java 一副牌洗牌,java,shuffle,Java,Shuffle,我试图在我的Pack类中测试我的两个函数,以模拟一副牌 public class Pack { private PlayingCard[] deck; // An array of 52 cards, representing the deck. private int cardsUsed; // How many cards have been dealt from the deck. /** * Creating an unshuffled deck
public class Pack {
private PlayingCard[] deck; // An array of 52 cards, representing the deck.
private int cardsUsed; // How many cards have been dealt from the deck.
/**
* Creating an unshuffled deck of cards
*/
public Pack() {
deck = new PlayingCard[51]; //Creates an array of 52 playing cards
int cardCt = 0; // How many cards have been created so far.
for ( int suit = 0; suit <= 3; suit++ ) { //If a suit is complete, move to the next suit
for ( int value = 1; value <= 14; value++ ) { //Builds a complete suit
deck[51] = new PlayingCard(value,suit);
cardCt++; //Adds one to the card count
}
}
cardCt = 0;
}
/**
* Shuffling a deck of cards
*/
public void shuffle() {
// Put all the used cards back into the deck, and shuffle it into
// a random order.
for ( int i = 51; i > 0; i-- ) {
int rand = (int)(Math.random()*(i+1));
PlayingCard temp = deck[i];
deck[i] = deck[rand];
deck[rand] = temp;
}
cardsUsed = 0;
}
public @Override String toString()
{
return Pack();
}
} // end class Pack
我想做的是将shuffle方法放入toString方法中,比如PlayingCard类,这样我就可以在我的packtest中测试它。我明白我不能返回无效声明,这就是我被卡住的地方。如果有人能解释我该做什么,我会非常感激。你能猜出我在这里做什么吗<代码>:)
请注意,
void
返回类型意味着没有返回对象-该方法在被调用时只执行它的操作。这是最佳实践洗牌方法
这是我节目中的一个非常粗略的片段
ArrayList cardsArray = new ArrayList();
cardsArray.Add(0);
//generate deck
for (int i = 1; i <= 52; i++)
{
cardsArray.Add(i);
}
// shuffle
object t = 0;
int s = 0;
Random r = new Random();
for(int i=52; i>=1; i=i-1){
s= (r.Next(i)) +1;
//swap
t = cardsArray[s];
cardsArray[s] = cardsArray[i];
cardsArray[i] = t;
}
cardsArray.RemoveAt(0);
ArrayList cardsArray=new ArrayList();
cardsArray.Add(0);
//生成甲板
对于(int i=1;i=1;i=i-1){
s=(r.Next(i))+1;
//交换
t=cardsArray[s];
cardsArray[s]=cardsArray[i];
cardsArray[i]=t;
}
cardsArray.RemoveAt(0);
你所说的“将shuffle方法放入toString方法中”是什么意思?你想返回一组卡片的名称,还是它的状态的一些指示器?我想最终在测试仪中打印出52张随机卡片,所以我想既然我在PlayingCard类中使用了toString方法,我会为pack类再次这样做。所以pack.toString()应该打印出52张牌的名字吗?啊,忽略return Pack()语句,它不起作用,我忘了删除它。不确定OP为什么要在toString方法中使用shuffle方法?如果这只是为了测试目的,那么它应该是好的,但是他可能应该保留这个函数,只打印洗牌组,而不在这个函数中包含洗牌。是的,没错。我会把它加到便条上。编辑:别这样我认为你击中了它的头:)
public class Pack {
// .. other code ..
public @Override String toString() {
// see note below
// shuffle();
StringBuilder sb = new StringBuilder();
sb.append("The cards are: ");
for (int i = 0; i < deck.length; i++) {
if (i > 0) sb.append(", ");
sb.append(deck.toString());
}
sb.append(".");
return sb.toString();
}
}
Pack myPack = new Pack();
myPack.shuffle();
System.out.println(myPack); // this automatically calls toString()
ArrayList cardsArray = new ArrayList();
cardsArray.Add(0);
//generate deck
for (int i = 1; i <= 52; i++)
{
cardsArray.Add(i);
}
// shuffle
object t = 0;
int s = 0;
Random r = new Random();
for(int i=52; i>=1; i=i-1){
s= (r.Next(i)) +1;
//swap
t = cardsArray[s];
cardsArray[s] = cardsArray[i];
cardsArray[i] = t;
}
cardsArray.RemoveAt(0);