Java - (打印不同的数字)

时间:2015-08-21 04:40:43

标签: java printing numbers distinct

我正试图解决这个问题:

“编写一个读取十个数字的程序,并显示不同数字的数量以及由一个空格分隔的不同数字。”

我的代码目前没有保存所有不同的数字,并且反复显示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] + " ");
    }
}

}

3 个答案:

答案 0 :(得分:5)

问题在于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与原始代码的其余部分一起进行了测试,似乎工作正常。

答案 1 :(得分:0)

尝试使用以下功能....使用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

    }
}

答案 2 :(得分:0)

如果您使用margin-bottom存储计数器,则需要设置默认值,否则如果您的数组有多个.main .menu,则通过等于进行区分。因为array默认值为 0

您可以使用0int array来存储list

vector