【问题标题】:Checking for duplicate numbers in a random array检查随机数组中的重复数字
【发布时间】:2017-09-15 20:40:53
【问题描述】:

我有一个用随机数填充的数组。我想检查数组中是否有任何重复的数字,但我遇到了问题。这是我到目前为止所拥有的:

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]);
}

【问题讨论】:

  • 您想“手动”完成还是愿意使用库函数?对数组进行排序通常是第一步,因为在排序后的数组上重复检测非常容易。 (这是你已经做的,但你必须迭代到 array.length -1 否则你会得到一个 IndexOutOfBound 异常。
  • 我想手工做只是为了学习这个过程。这个想法是找到重复项及其索引位置。

标签: java arrays random


【解决方案1】:

您可以使用 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");
        }
    }

【讨论】:

    【解决方案2】:

    您的代码失败,因为您尝试访问数组中最后一个元素:最后一个是array[array.length - 1],但您在调用array[index+1] 时尝试了array[array.length],并且您的索引已经是最后一个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]);
      }
    }
    

    但是,我认为此代码不会解决您的问题,因为它只会找到相邻的重复项。如果你需要所有重复,你需要双循环:

    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]);
        }
      }
    }
    

    【讨论】:

    • 我现在明白了。在内循环中。只需将 j 初始化为下一个索引位置并查看它们是否匹配。谢谢,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多