Fisher Yates洗牌时Java堆栈中剩下的元素?
我写的一些代码有点问题。基本上,我试图像一副牌一样“洗牌”一个堆栈集合,但由于某种原因,我使用的一个临时堆栈不会完全清空,这会导致下一次运行时出现空集合异常。我手工跟踪代码和输出,元素被留在临时堆栈1中(代码如下)。我真的不知道为什么会这样!如果你对此有任何见解,那将非常有帮助 以下是问题方法的链接:Fisher Yates洗牌时Java堆栈中剩下的元素?,java,stack,shuffle,Java,Stack,Shuffle,我写的一些代码有点问题。基本上,我试图像一副牌一样“洗牌”一个堆栈集合,但由于某种原因,我使用的一个临时堆栈不会完全清空,这会导致下一次运行时出现空集合异常。我手工跟踪代码和输出,元素被留在临时堆栈1中(代码如下)。我真的不知道为什么会这样!如果你对此有任何见解,那将非常有帮助 以下是问题方法的链接: public-void-shufflecard(LinkedStack-deck){ int临时索引; LinkedStack tempCardStack1=新LinkedStack(); Lin
public-void-shufflecard(LinkedStack-deck){
int临时索引;
LinkedStack tempCardStack1=新LinkedStack();
LinkedStack tempCardStack2=新LinkedStack();
//费希尔·耶茨洗牌
对于(inti=(deck.size()-1);i>=0;i--){
tempIndex=((int)(i*Math.random());
System.out.println(“i为:+i”);
System.out.println(“tempIndex是:“+tempIndex”);
//如果卡不同,则交换
if(tempIndex!=i){
//将正面朝下的卡向上弹出到临时堆栈上的第一张卡
System.out.println(“弹出到第一张卡”);
for(int j=0;j如果弹出堆栈,则大小会缩小,因此for循环将只运行size/2次
所以结束循环应该是
while(!tempCardStack1.isEmpty()){
tempCard = tempCardStack1.pop();
System.out.println(tempCard.toString());
faceDownCards.push(tempCard);
}
下次你应该只添加代码。没有那么多。一般来说,人们不想关注代码的链接(特别是因为该链接可能会在将来消失,从而降低问题和答案的价值)。对不起,我是新来的。谢谢你纠正这一点!
while(!tempCardStack1.isEmpty()){
tempCard = tempCardStack1.pop();
System.out.println(tempCard.toString());
faceDownCards.push(tempCard);
}