试图计算整数数组中的重复项,但得到奇怪的结果

时间:2018-03-07 19:07:09

标签: java arrays count

public static void checkMultiple(int a[]){

    //will use this count variable later
    //int[] count = new int[10];

    //first scan over the array
    for (int i = 0; i < a.length; i++)
    {
    //seeded loop to check against 1st loop    
        for (int j = 0; j < i; j++)
        {    
            if (a[i] == a[j])
            {
            System.out.print(a[i] + " ");
            }
        }
    }
}

我无法计算10个随机数的整数数组中的重复数字。我没有写过&#34; count&#34;函数但checkMultiple()将打印出重复的数字。但是,有些时候它打印正确,如:

  

4 2 9 0 9 6 3 3 7 5

     

9 3

第一行是整个数组,第二行是数组中至少重复一次的数字。但是当一个整数有两个以上时,它会计算该整数中的每一个,例如:

  

9 5 2 8 5 5 7 6 3 3

     

5 5 5 3

任何提示或建议将不胜感激!

4 个答案:

答案 0 :(得分:0)

只需使用哈希映射,如果密钥不存在,则将其添加到值为1的映射中,如果它确实增加了值,则打印哈希映射。

数组的单次迭代将解决问题。

Map<Integer, Integer> counter = new HashMap<>();

for (int i = 0; i < a.length; i++) {
    if (counter.containsKey(a[i])) {
        counter.put(a[i], counter.get(a[i]) + 1);
    } else {
        counter.put(a[i], 1);
    }
}

Iterator it = counter.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry) it.next();

    for (int i = 0; i < pair.getValue(); ++i) {
        System.out.print(pair.getKey() + " ");    
    }

    // or you could just print the number and how many times it was found
    System.out.println(pair.getKey() + " " + pair.getValue());    

    it.remove();
}

答案 1 :(得分:0)

看起来像是在循环然后立即输出结果。

这可以防止程序比较当前正在解析的内容以及已经解析和计算的内容。

我会将一个空数组传递给第一个FOR循环,而不是&#34; System.out.print,&#34;将数字存储在传入的数组中。然后,您可以将已经解析的值与当前正在解析的值进行比较,以查看它是否已被计数。

当外部FOR循环退出时,输出最初传入空的数组(现在有一个初始数组中每个副本的记录)

答案 2 :(得分:0)

您正在计算重复实例的数量。你的第二个例子有三对重复的5对。这就是为什么你看到5次重复三次。仅输出唯一的重复结果。

答案 3 :(得分:-1)

试试这个

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

public class BirthdayCake {

    private static void printcake(int n,int[] arr){
        //Map<Integer,Integer> ha = new HashMap<Integer,Integer>();
        int temp = arr[0],max=0, count=0;
        /*for(int i=1;i<n;i++){
            max = arr[i];
            if(max<=temp){
                temp=max;
                count++;
                break;
            }
            else{
                max = arr[i];
                count++;
                break;
            }

        }*/
        Arrays.sort(arr);
        for(int i:arr){
            System.out.println(i);
        }
        System.out.println("max:" +max);
        max = arr[arr.length-1];
        for(int i=0;i<n;i++){
            if(arr[i]==max){
                count++;
            }

        }

        System.out.println("count:" +count);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("Entere thye array size:");
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = sc.nextInt();
        }
         printcake(n,arr);
    } 

}