2017-04-19 157 views
3

我有一個數組填充了隨機數。我想檢查數組中是否有重複的數字,但我遇到了問題。這是我到目前爲止有:檢查隨機數組中的重複數字

Random randomNum=new Random();   
int[] array = new int[100]; 
for(int i = 0; i < array.length; i++) { 
    array[i] = randomNum.nextInt(100); //0-99 
    System.out.print(array[i] + " "); 
} 

for(int index = 0; index < array.length; index++) { 
    if(array[index] == array[index+1]) 
    System.out.println("Match in"+array[index]); 
} 
+0

你想「手動」還是願意使用庫函數?排序數組通常是第一步,因爲重複檢測對於排序後的數組非常簡單。 (這是你已經做的,但你必須迭代到'array.length -1',否則你會得到一個IndexOutOfBound異常。 – flowit

+0

我想手工完成這個過程。想法是找到 – KLane

回答

3

您的代碼失敗,因爲你試圖去年之後訪問元素數組:最後一個是array[array.length - 1],但你試過array[array.length]當呼叫array[index+1]和索引已經是最後array.length - 1 + 1 = array.length。要解決這個問題,只需轉到prelast元素。

Random randomNum=new Random();   
int[] array = new int[100]; 
for(int i = 0; i < array.length; i++) { 
    array[i] = randomNum.nextInt(100); //0-99 
    System.out.print(array[i] + " "); 
} 

for(int index = 0; index < array.length - 1; index++) 
{ 
    if(array[index] == array[index+1]) 
    { 
    System.out.println("Match in "+array[index]); 
    } 
} 

但是,我認爲這個代碼不會解決你的問題,因爲它只會找到鄰居dublicates。如果你需要的所有dublicates,你需要雙循環:

Random randomNum=new Random();   
int[] array = new int[100]; 
for(int i = 0; i < array.length; i++) { 
    array[i] = randomNum.nextInt(100); //0-99 
    System.out.print(array[i] + " "); 
} 

for(int i = 0; i < array.length; i++) 
{ 
    for(int j = i+1; j < array.length; j++) { 
    if(array[i] == array[j]) { 
     System.out.println("Match in "+array[i]); 
    } 
    } 
} 
+2

我現在看到了,在內部循環中,只需將j初始化到下一個索引位置,並查看它們是否匹配,謝謝,這有很大的幫助! – KLane

3

您可以使用HashSet中找到重複的值,因爲它不接受重複。

Random randomNum = new Random(); 
    int[] array = new int[100]; 
    for (int i = 0; i < array.length; i++) { 
     array[i] = randomNum.nextInt(100); // 0-99 
     System.out.print(array[i] + " "); 
    } 
    Set<Integer> rnd = new HashSet<Integer>(); 
    for (int i : array) { 
     if (!rnd.add(i)) { 
      System.out.println(i + " is a duplicate"); 
     } 
    }