Java -(打印不同的数字)

Java - (Print distinct numbers)

我正在尝试解决这个问题:

"Write a program that reads in ten numbers and displays the number of distinct numbers and the distinct numbers separated by exactly one space."

我的代码目前没有保存所有不同的数字,有时会重复显示 0。如果有人能看出我的逻辑哪里出了问题,任何提示都会有所帮助。谢谢!

public class PracticeProject
{
public static void main(String args[])
{
    int[] number = new int[10];
    int[] counter = new int[10];
    int numcounter = 0;

    numGen(number);
    numcounter = distNum(number, counter, numcounter);
    dispDist(counter, numcounter);
}

public static void numGen(int[] number)
{
    Random rand = new Random();

    for (int i = 0; i < number.length; i++)
    {
        number[i] = rand.nextInt(10);
        System.out.print(number[i] + " ");
    }

    System.out.println();
}

public static int distNum(int[] number, int[] counter, int numcounter)
{
    for (int i = 0; i < number.length; i++)
    {           
        for (int j = 0; j <= i; j++)
        {
            if (counter[j] == number[i])
            {
                break;
            }

            if (j == i)
            {
                counter[j] = number[i];
                numcounter++;
            }
        }
    }
    return numcounter;
}

public static void dispDist(int[] counter, int numcounter)
{
    for (int i = 0; i < numcounter; i++)
    {
        System.out.print(counter[i] + " ");
    }
}

}

问题出在您的 distNum() 方法的逻辑上,它没有正确地从输出数组中删除所有重复项。尝试改用此版本:

public static int distNum(int[] number, int[] counter, int numcounter) {
    for (int i = 0; i < number.length; i++) {
        boolean isUnique = true;
        for (int j = 0; j < numcounter; j++) {
            if (counter[j] == number[i]) {
                isUnique = false;
                break;
            }
        }
        if (isUnique) {
            counter[numcounter] = number[i];
            numcounter++;
        }
    }
    return numcounter;
}

我遍历随机数数组,并针对每个随机数扫描 counter 以查看是否已遇到该值。如果它是重复的,那么它不会被添加到唯一列表中。

此方法与您的其余原始代码一起使用 IntelliJ 进行了测试,似乎工作正常。

尝试将函数放在下面....使用 Hashmap...键将不存在。值将是它发生的明确时间。

public void duplicate(int[] a) {

    HashMap<Integer, Integer> h = new HashMap<Integer, Integer>();
    for (int i = 0; i < a.length; i++) {
        Integer j = (int) h.put(a[i], 1);
        if (j != null) {         // checking if already in hashmap
            h.put(a[i], j + 1);   // if there then incrementing value
        }

    }

    Iterator it = h.entrySet().iterator();  // displaying value you can have you logic here
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry) it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
        it.remove(); // avoids a ConcurrentModificationException

    }
}

如果你使用array来存储你的计数器,你需要设置默认值,否则如果你的数组有多个0,它通过相等来区分。因为 int array 默认值是 0.

并且您可以使用 listvector 来存储您的 counters

public static void main(String args[]) {
        int[] number = new int[10];
        int[] counter = new int[10];
        List<Integer> counters = new ArrayList<Integer>();
        int numcounter = 0;

        numGen(number);
        numcounter = distNum(number, counters, numcounter);
        dispDist(counters, numcounter);
    }

    public static void numGen(int[] number) {
        Random rand = new Random();

        for (int i = 0; i < number.length; i++) {
            number[i] = rand.nextInt(10);
            System.out.print(number[i] + " ");
        }

        System.out.println();
    }

    public static int distNum(int[] number, List<Integer> counters, int numcounter) {
        for (int i : number) {
            if (!counters.contains(i)){
                counters.add(i);
            }
        }
        return numcounter;
    }

    public static void dispDist(List<Integer> counter, int numcounter) {
        for (Integer i : counter) {
            System.out.print(i + " ");
        }
    }