Java - 获取重复的数组元素及其重复次数

时间:2016-08-29 09:33:28

标签: java arrays

我想提取和计算重复的数组元素,例如:

int arr []= {7,4,3,0,2,0,5,2,13,2,0,3};

输出应为

  

2重复3次

     

0重复3次

     

3次重复2次

我的试用版代码是用Java编写的:

public static void repeated(int x[]){
        int i, j;
        int counter = 0;
        for(i=0 ; i<x.length ; i++ ){
            boolean isRepeat = false;
            for(j=i-1 ; j>=0 ; j--){
                if(x[i] == x[j]){
                    isRepeat = true;
                    counter++;
                }
            }
            if(isRepeat){
                counter = counter+1;
                System.out.println(x[i] + " repeated " + counter + " times");
                counter = 0;
            }
        }
    }

    public static void main(String[] args) {
        int arr []= {7,4,3,0,2,0,5,2,13,2,0,3};
        repeated(arr);
    }

但我的输出是:

  

0重复2次

     

2重复2次

     

2重复3次

     

0重复3次

     

3次重复2次

我根据您的帮助开发了一个新代码,但我的新代码只解决了第一个问题:

public static void repeated(int x[]){
        int i, j;
        for(i=0 ; i<x.length ; i++ ){
            int isRepeat = 1;
            for(j=i-1 ; j>=0 ; j--){
                if(x[i] == x[j]){
                    isRepeat ++;
                }
            }
            if(isRepeat == 2){
                System.out.println(x[i] + " repeated " + "? times");
            }

        }
    }

    public static void main(String[] args) {
        int arr []= {7,4,3,0,2,0,5,2,13,2,0,3};
        repeated(arr);
    }

然后输出:

  

0重复?次

     

2重复?次

     

3重复?次

仍然是我想要的计数器,没有任何列表或hashmap

3 个答案:

答案 0 :(得分:0)

  1. 创建HashMap<Integer, Integer>
  2. 对于arr中的每个号码,请检查它是否在map.keySet中。如果是,请递增该值。如果不加一个。
  3. 对于map.keySet中的键,如果值&gt; 1,打印键+“重复”+值+“次\ n”

答案 1 :(得分:0)

在遍历中有内部循环,有一组整数来存储已经计数的一个,在检查重复检查之前是否已经存在于计数中如果忽略

public static void repeated(int x[])
    {
        int i, j;
        int counter = 0;
        Set<Integer> alreadyCounted = new HashSet<>();
        for (i = 0; i < x.length; i++)
        {
            boolean isRepeat = false;
            if (!alreadyCounted.contains(x[i]))
            {
                for (j = i + 1; j < x.length; j++)
                {
                    if (x[i] == x[j])
                    {
                        isRepeat = true;
                        alreadyCounted.add(x[i]);
                        counter++;
                    }
                }
                if (isRepeat)
                {
                    counter = counter + 1;
                    System.out.println(x[i] + " repeated " + counter + " times");
                    counter = 0;
                }
            }
        }
    }

public static void main(String[] args) {
        int arr []= {7,4,3,0,2,0,5,2,13,2,0,3};
        repeated(arr);
}

答案 2 :(得分:0)

int arr [] = {7,4,3,0,2,0,5,2,13,2,0,3};

public static void main( String[] args )
{
    FindingFreq ob = new FindingFreq();
    for( Map.Entry<Integer, Integer> entry : ob.getList() )
    {
        System.out.println( entry.getKey() + " repeated " + entry.getValue() + " times !" );
    }

}

private List<Map.Entry<Integer, Integer>> getList()
{
    Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
    for( Integer intValue : arr )
    {
        if( map.get( intValue ) == null )
        {
            map.put( intValue, 1 );
        }
        else
        {
            map.put( intValue, map.get( intValue ) + 1 );
        }
    }
    List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry<Integer, Integer>>( map.entrySet() );
    Comparator<Map.Entry<Integer, Integer>> comp = new Comparator<Map.Entry<Integer, Integer>>()
    {

        @Override
        public int compare( Entry<Integer, Integer> o1, Entry<Integer, Integer> o2 )
        {
            return ( o1.getValue() ).compareTo( o2.getValue() );
        }
    };

    Comparator<Map.Entry<Integer, Integer>> cmp1 = Collections.reverseOrder( comp );
    Collections.sort( list, cmp1 );

    return list;
}

}