如何仅打印一次重复数组

时间:2019-04-18 18:57:34

标签: java arrays printf

因此,我必须计算用户输入并显示回给用户的次数。我创建了一个带for循环的数组,以计算出现的次数。但是,我一直坚持如何以正确的格式打印信息。当我打印数组时,它将打印所有数字,甚至重复的数字。在该示例中,我们应该打印没有重复的示例。我对从这里去完成它感到迷茫。稍加指导就可以了!

正确的输出: https://imgur.com/fAWdj5g

我当前的输出: https://imgur.com/bFR7zYF

我尝试制作另一个数组来获取重复项,甚至尝试删除该数组,但到目前为止还算不上运气。

int[] num = new int[7];
       int[] totalCount = new int[7];
       Scanner kb = new Scanner(System.in);

        System.out.print("Enter seven numbers: ");
        for(int i=0; i<num.length; i++){
            num[i] = kb.nextInt();

            if(num[i] == 0)
                break;
        }


        for(int j=0; j<num.length; j++){
            for (int i=0; i<num.length; i++){
                if(num[j] == num[i]){
                    totalCount[j]++;
                }
            }
        }

        for(int k=0; k<num.length; k++){
             System.out.printf("%d occurs %d time\n",num[k], totalCount[k]);

        }

3 个答案:

答案 0 :(得分:0)

在打印过程中,只需检查编号是否在以下位置打印过:

    for(int j=0; j<num.length; j++){
        boolean shouldPrint = true;
        for (int i=0; i<j; i++){
            if(num[j] == num[i]){
                shouldPrint = false;
            }
        }
        if (shouldPrint == true) {
             System.out.printf("%d occurs %d time\n",num[k], totalCount[k]);
        }
    }

那样,第二个元素将不会被打印。

答案 1 :(得分:0)

如果可以使用java8和流,则可以使用Collectors.groupingByCollectors.counting将各个元素映射到它们的计数。

int[] num = new int[7];
Scanner kb = new Scanner(System.in);

System.out.print("Enter seven numbers: ");
for(int i=0; i<num.length; i++){
    num[i] = kb.nextInt();
    if(num[i] == 0)
        break;
}

Map<Integer, Long>  = Arrays.stream(num)
                                    .boxed()
                                    .collect(Collectors.groupingBy(p -> p, Collectors.counting()));

for (Map.Entry<Integer, Long> entry : countMap.entrySet()) {
    System.out.printf("%d occurs %d times\n",entry.getKey(), entry.getValue());
}

答案 2 :(得分:0)

使用Java8或更高版本:

Arrays.stream(nums).boxed()
  .collect(Collectors.groupingBy(n -> n, Collectors.counting()))
  .entrySet()
  .stream()
  .forEach(e -> System.out.printf("%d occurs %d time(s)\n", e.getKey(), e.getValue()));

输出:

1 occurs 2 time(s)
2 occurs 3 time(s)
3 occurs 2 time(s)
4 occurs 1 time(s)
5 occurs 1 time(s)