计算数组中的整数;如何消除重复的输出字符串

Counting integers in an array; How to eliminate duplicate output strings

我正在编写一个程序,输出每个整数在整数数组中被找到的次数。我已经做到了这一点,但是,我有重复的输出字符串。

这是输出:

>run:
>Please enter integers from 0 to 100: 
1
2
3
4
4
5
0
// 1 occurs 1 time //
2 occurs 1 time //
3 occurs 1 time //
4 occurs 2 times //
4 occurs 2 times //
5 occurs 1 time //
BUILD SUCCESSFUL (total time: 14 seconds)

正如您所见,“4 occurs 2 times”打印了两次,因为它在数组中出现了两次。

我只需要一些关于如何消除重复项的指导。任何事情都将不胜感激。

import java.util.*;
public class WorkSpace3 {
    public static void main(String[] args) {
        int i = 0;
        int count = 0;
        int key = 0;

        System.out.print("Please enter integers from 0 to 100: ");
        int[] myList = new int[100];
        Scanner s = new Scanner(System.in);
        for (i = 0; i < myList.length; i++) 
        {
            myList[i] = s.nextInt();
            if (myList[i] == 0)
                break;
        }

        while (key < myList.length && myList[key] != 0) {
            for (i = 0; i < myList.length; i++) 
            {

                {   if (myList[i] == myList[key]) 
                    {  count++; }   }
            }


            if (count == 1)
                System.out.println(myList[key] + " occurs " + count + " time ");
            if (count > 1)
                System.out.println(myList[key] + " occurs " + count + " times ");
            key++;
            count = 0;

        }
    }
}

查看集合元素:

https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

从数组创建集合元素您删除了重复项。

您可以使用的一种简单方法是用零标记您计算过的元素。这种方法并不通用;它之所以有效,只是因为您使用零来标记最终用户输入序列的结尾。

您必须稍微修改您的代码才能使用此方法:与其在 while 循环中寻找零,不如设置一个变量来标记序列的长度。开始时设置为myList.length,然后在中断时重新设置为i。现在您可以将列表遍历到这个最大计数,进行计数,然后将零设置到您已经计数的元素中。

尝试使用 Map

Map<Integer,Integer> counts=new HashMap<Integer,Integer>();
for (i = 0; i < myList.length; i++) {
 if(counts.contains(myList[i]){
counts.put(myList[i],++counts.get(myList[i]);
 }else{
 counts.put(myList[i],1);
}