import java.util.*;
public class IceCream
{
private static Random rand=new Random();
public static final String[] flavors={
"Chocolate","Strawberry","Vanilla Fudge Swirl",
"Mint Chip","Mocha Almond Fudge","Rum Raisin",
"Praline Cream","Mud Pie"
};
public static String[] flavorSet(int n){
String[] results=new String[n];
boolean[] picked=new boolean[flavors.length];
for(int i=0;i<n;i++){
int t;
do
t=rand.nextInt(flavors.length);
while(picked[t]);
results[i]=flavors[t];
picked[t]=true;
}
return results;
}
public static void main(String[] args)
{
for(int i=0;i<20;i++){
System.out.println("flavorSet("+i+")=");
String[] f1=flavorSet(flavors.length);
for(int j=0;j<f1.length;j++)
System.out.println("/t"+f1[j]);
}
}
}
这是Thinking in Java(3rd E)Chapter 11中的一个程序 ,红色字体的几行程序有点小bug,当picked={1,1,1,1,1,1,1,1}时,do...while() 会形成一个死循环。当然这样的概率是2的8次方。当然是1/4096这样的概率应该是很大了。
本文介绍了一个使用Java实现的随机冰淇淋口味选择器程序。该程序通过随机算法从预定义的口味列表中选取不重复的口味组合。文章指出程序存在小概率死循环的bug,并讨论了其触发条件。

被折叠的 条评论
为什么被折叠?



