我觉得比较精妙吧。 注意,第一个参数不要比第二个参数大。
1 public static int[] randon(int num, int length) 2 { 3 boolean[] cards = new boolean[length]; 4 5 for (int r = 0; r < length; ++r) 6 { 7 cards[r] = false; 8 } 9 10 Random arg6 = new Random(); 11 int[] result = new int[num]; 12 13 for (int index = 0; index < num; ++index) 14 { 15 int x; 16 do 17 { 18 x = arg6.nextInt(length); 19 } while (cards[x]); 20 21 cards[x] = true; 22 result[index] = x; 23 } 24 25 return result; 26 }
再来一段
1 public static String[] randomRank(String[] bookIDs, int num) 2 { 3 if (null != bookIDs && 0 != bookIDs.length) 4 { 5 if (num >= bookIDs.length) 6 { 7 num = bookIDs.length; 8 } 9 10 ArrayList list = new ArrayList(bookIDs.length); 11 12 for (int ran = 0; ran < bookIDs.length; ++ran) 13 { 14 list.add(bookIDs[ran]); 15 } 16 17 int[] arg6 = randon(num, bookIDs.length); 18 ArrayList reList = new ArrayList(bookIDs.length); 19 20 int ids; 21 for (ids = 0; ids < arg6.length; ++ids) 22 { 23 String o = (String)list.get(arg6[ids]); 24 reList.add(o); 25 } 26 27 for (ids = 0; ids < reList.size(); ++ids) 28 { 29 list.remove(reList.get(ids)); 30 } 31 32 reList.addAll(list); 33 String[] arg7 = new String[reList.size()]; 34 return (String[])((String[])reList.toArray(arg7)); 35 } 36 else 37 { 38 return null; 39 } 40 }