删除重复输出

Remove repeated output

我正在编写有关 Hashmap 的初学者 Java 教程,我遇到了以下任务

// Create a method called printOccurrences(int[] scores)
        //
        // HINT: Use a HashMap to keep track of the counts (K: Integer, V: Integer)
        // For int[] scores = {85,93,96,96,92,100,91,85,87,92}
        // Desired Output Is:
        //  85 - 2
        //  87 - 1
        //  92 - 2
        //  93 - 1
        //  96 - 2
        // 100 - 1
        //

下面是我的代码

import java.util.HashMap;

public class Ex5_NumberOfOccurrences {
    public static void main(String[] args) {
        int[] scores = {85,93,96,96,92,100,91,85,87,92};
        printOccurrences(scores);
    }
        public static void printOccurrences (int[] scores){
            HashMap <Integer, Integer> tracker = new HashMap<Integer, Integer>();
            for (int i = 0; i < scores.length; i++){
                int count = 0;
                for (int j =  0; j< scores.length; j++){
                    if (scores [i] == scores[j]){
                        count ++;
                    }   
                }
            tracker.put(scores[i], count);

            System.out.println( scores[i] + "-" + tracker.get(scores[i]));
            }           
        }
}

代码运行了,但是我的输出有重复的值,如下所示。

85-2
93-1
96-2
96-2
92-2
100-1
91-1
85-2
87-1
92-2

有谁知道如何避免重复的输出值?

由于您的 println 在外部 for 循环内,所以每次您在 scores 数组中输入一个值时都会打印结果。

我觉得更本着问题的精神,试着改写成这样:

for each score - 
   if the map has the score key - 
     pull the value out of the map and increment it, return it to the map
   else 
     insert into the map (key, 1)

不同之处在于,这将为您提供线性性能而不是二次性能(即此版本将 运行 时间与输入数组的长度成正比,因为您只需扫描一次数组,而您的版本将 运行 及时与数组长度的平方成正比)。

您在每次迭代时打印跟踪器输出,这会导致重复输出。 HashMap 存储了正确的值。

你可以尝试(在 for 循环之外):

for (int key : tracker.keySet())
  System.out.println(key + "-" + tracker.get(key));

此外,您可以使用 tracker (HashMap) 来跟踪,而不是使用多个 for 循环:

for (int score : scores) {
  if (tracker.constainsKey(score))
    tracker.put(score, tracker.get(score) + 1);
  else
    tracker.put(score, 1); //Init for each score