public class IceCream {
static String[] flav={
"Chocolate", "Strawberry",
"Vanilla Fudge Swirl", "Mint Chip",
"Mocha Almond Fudge", "Rum Raisin",
"Praline Cream", "Mud Pie"
};
static String[] flavorSet(int n){
n=Math.abs(n)%(flav.length+1);
String[] results=new String[n];
int[] picks=new int[n];
for (int i=0;i<picks.length;i++)
picks[i]=-1;
for (int i=0;i<picks.length;i++){
retry:
while(true){
int t=(int)(Math.random()*flav.length);
for (int j=0;j<i;j++) {
if (picks[j] == t) {
continue retry;
}
}
picks[i]=t;
results[i]=flav[t];
break ;
}
}
return results;
}
public static void main(String[] args){
for (int i=0;i<20;i++){
System.out.println("flavorSet("+i+")=");
String[] f1=flavorSet(flav.length);
for (int j=0;j<f1.length;j++)
System.out.println("\t"+f1[j]);
}
}
}
当flavorSet()随机挑选香料的时候,它需要确保以前出现过的一次随机选择不会再次出现,为了达到这个目的,使用了一个while循环,不断做出随机选择,直到发现未在picks数组里出现过的一个元素为止。
如果成功就添加这个元素,并中断循环,再查找下一个。但假设t是一个已经在picks里出现过的数组,就是用标签continue往回跳两级,强制选择一个新t。