2017-04-19 64 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"); 
     } 
    }