Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fisher Yates洗牌时Java堆栈中剩下的元素?_Java_Stack_Shuffle - Fatal编程技术网

Fisher Yates洗牌时Java堆栈中剩下的元素?

Fisher Yates洗牌时Java堆栈中剩下的元素?,java,stack,shuffle,Java,Stack,Shuffle,我写的一些代码有点问题。基本上,我试图像一副牌一样“洗牌”一个堆栈集合,但由于某种原因,我使用的一个临时堆栈不会完全清空,这会导致下一次运行时出现空集合异常。我手工跟踪代码和输出,元素被留在临时堆栈1中(代码如下)。我真的不知道为什么会这样!如果你对此有任何见解,那将非常有帮助 以下是问题方法的链接: public-void-shufflecard(LinkedStack-deck){ int临时索引; LinkedStack tempCardStack1=新LinkedStack(); Lin

我写的一些代码有点问题。基本上,我试图像一副牌一样“洗牌”一个堆栈集合,但由于某种原因,我使用的一个临时堆栈不会完全清空,这会导致下一次运行时出现空集合异常。我手工跟踪代码和输出,元素被留在临时堆栈1中(代码如下)。我真的不知道为什么会这样!如果你对此有任何见解,那将非常有帮助

以下是问题方法的链接:

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