此題提供三種思路及對應代碼:數組
方法一:構建一個新數組,將舊數組隨機的一個數存儲進新數組,判斷新數組中有沒有該數,有則繼續,無則插入,但存在運氣,由於隨機抽取的可能已經存在於新數組中了;dom
方法二:構建一個新數組,將舊數組隨機的一個數存儲進新數組,並將這個數從舊數組中刪除,下次就不會再隨機抽到該數了;rem
方法三:運用集合知識Collections.shuffle()進行打亂,而後輸出便可。get
public class LuanxuPrint {
public static void main(String[] args) {
int[] arr = {2,4,5,6,7,8,9,10,11,12,13,14};
int[] newArr = new int[arr.length];
print1(arr,newArr);
print2(arr,newArr);
print3(arr,newArr);
}
public static void print3(int[] arr, int[] newArr) {
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> newList = new ArrayList<Integer>();
for(Integer i : arr){
list.add(i);
}
Collections.shuffle(list);
System.out.print(list);
}
public static void print2(int[] arr, int[] newArr) {
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> newList = new ArrayList<Integer>();
for(Integer i : arr){
list.add(i);
}
while(list.size() > 0){
int ran = (int) (Math.random()*(list.size()));
// System.out.print(ran+" ");
if(!newList.contains(list.get(ran))){
newList.add(list.get(ran));
}else{
list.remove(list.get(ran));
}
}
System.out.print(newList);
}
public static void print1(int[] arr, int[] newArr){
int count = 0;
while(true){
int ran = (int) (Math.random()*(arr.length));
// System.out.print(ran+" ");
if(!exist(arr[ran],newArr)){
newArr[count++] = arr[ran];
}
if(count == arr.length){
break;
}
}
System.out.println();
for(Integer i : newArr){
System.out.print(i + " ");
}
}
public static boolean exist(int ran, int[] newArr) {
for(int i = 0; i < newArr.length; ++i){
if(newArr[i] == ran){
return true;
}
}
return false;
}
}io