Thinking in Java-从数组中随机生成且不重复

来源:互联网 发布:18级毕业生 程序员 编辑:程序博客网 时间:2024/06/14 13:40
 在c和c++中,我们不能返回一个数组,只能返回指向数组的一个指针。 在Java中,能形式上"返回一个数组",实际返回的仍然是指向数组的指针。不必担心那个返回数组是否可用,只要需要,它就会自动存在,当不需要时,垃圾回收器会在我们完成后自动清理。

Demo:

public class IceCream{    static String[] flav={"巧克力","草莓","蓝莓","香草","抹茶","香蕉"};    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)            {              //Math.random() 从0-1随机选取一个数              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。

“`

0 0
原创粉丝点击