gpt4 book ai didi

java - 在将重复项添加到数组之前识别重复项

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:29 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序由一个数组组成,其中填充了 50 个介于 1-999 之间的随机数。但是,在将随机数添加到数组之前,我必须检查该数字是否重复且不在数组中。

我似乎非常接近正确的输出,但是由于某种原因,我反复将数字 0 作为数组中的第一个元素,它也是唯一重复的数字。有谁知道这是为什么,如果是的话能够提供合适的解决方案吗?

一旦找到重复项,就需要将其打印到输出中,并用新的唯一随机数替换。

提前致谢。

import java.util.*;
public class Random50 {
public static void main (String[] args)
{
final int MAX_SIZE = 50;
int[] r50 = new int[MAX_SIZE];
boolean duplicates = false;

Random rand = new Random();

for (int i=0; i<r50.length; i++)
{
for (int j=i+1;j<r50.length;j++)
{
r50[i] = rand.nextInt(1000);

if (j!=i && r50[i] == r50[j])
{
duplicates = true;
System.out.println("DUPE: " + r50[i]);
r50[i] = rand.nextInt(1000);
}

}
}

System.out.println(Arrays.toString(r50));
}

最佳答案

j 总是大于 i,因为你将 j 初始化为 i+1。这意味着 j 引用的 r50 的值始终为 0,因此它们将始终是重复项。

比如i = 20,在第二个循环中,j会从21开始。r50[21],r50[22],等等都是0,因为你还没有设置,所以r50[i] 和 r50[j] 唯一可能的重复是 0。

编辑:如果 j 的要点是遍历数组的所有先前元素,那么您将需要

   for (int i=0; i<r50.length; i++)
{
r50[i] = rand.nextInt(1000); //Set it before the j loop
for (int j = 0; j < i; j++)
{
while (r50[i] == r50[j]) //while loop, in case of multiple duplicates
{
duplicates = true; //Still not sure why you want this boolean
System.out.println("DUPE: " + r50[i]);
r50[i] = rand.nextInt(1000);
}
}
}

虽然这仍然不能完美地工作,因为您可能会在检查后将 r50 设置为更早的值。例如,如果您确定 r50[20] 不等于 j 到 10 的任何值,然后它等于 r50[11](当 j = 11 时),那么您可能会不小心将它改回j 的值小于该值(例如,r50[5])。

我认为最巧妙的方法是,正如 Duncan 和 Rajeev 所做的那样,

HashSet numbers = new HashSet();
Random rand = new Random();

while(numbers.size() < MAX_SIZE) {
numbers.add(rand.nextInt(1000));
}

关于java - 在将重复项添加到数组之前识别重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com