Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅打印int数组中的重复项及其出现次数_Java - Fatal编程技术网

Java 仅打印int数组中的重复项及其出现次数

Java 仅打印int数组中的重复项及其出现次数,java,Java,我试图只打印数组中的重复元素以及每个元素出现的次数 示例: Number 0 appears 3 times; Number 12 appears 2 times; Number 43 appears 2 times 我的代码打印数组的所有元素,而不是只打印重复的元素 我必须指出,我不能使用HashMap,只能使用条件语句 谢谢 下面是代码: int[] array = new int[] { 12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0,

我试图只打印数组中的重复元素以及每个元素出现的次数

示例:

Number 0 appears 3 times; 
Number 12 appears 2 times; 
Number 43 appears 2 times
我的代码打印数组的所有元素,而不是只打印重复的元素

我必须指出,我不能使用
HashMap
,只能使用
条件语句

谢谢 下面是代码:

    int[] array = new int[] { 12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87 };
    int counter = 0, temp = 0;// variable that holds the temporary value of each element
    Arrays.sort(array);
    for (int i = 0; i < array.length; i++) {
        temp = array[i];
        counter = 0;
        for (int j = 0; j < array.length; j++) {
            if (temp == array[j]) {
                counter++;
            }
        }
        System.out.println("Number:" + array[i] + "occurs :" + counter + " times");
    }
int[]数组=新的int[]{12,0,-22,0,43545,-4,-55,12,43,0,-999,-87};
int计数器=0,温度=0;//保存每个元素的临时值的变量
数组。排序(数组);
for(int i=0;i
一个简单的解决方案是使用地图来计算每个数字出现的次数。然后,迭代映射并报告任何计数为两个或更多的数字

int[] array = new int[]{12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87};
Map<Integer, Integer> map = new HashMap<>();
for (int num : array) {
    Integer count = map.get(num);
    map.put(num, count == null ? 1 : count.intValue() + 1);
}

// now iterate the map
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    Integer num = entry.getKey();
    Integer count = entry.getValue();
    if (count > 1) {
        System.out.println("Number: " + num + ", occurs: " + count + " times");
    }
}
int[]数组=新的int[]{12,0,-22,0,43545,-4,-55,12,43,0,-999,-87};
Map Map=newhashmap();
for(int num:array){
整数计数=map.get(num);
put(num,count==null?1:count.intValue()+1);
}
//现在迭代映射
对于(Map.Entry:Map.entrySet()){
整数num=entry.getKey();
整数计数=entry.getValue();
如果(计数>1){
System.out.println(“数字:+num+”,出现次数:+count+);
}
}
试试这个:

package com.stackoverflow.java;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class DuplicatesAndCount {
    public static void main(String[] args) {
    int[] array = new int[]{12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87};

    // taking hashmap to accumulate corresponding couter of each number
     HashMap<Integer, Integer> ht = new HashMap<Integer, Integer>();                    
     for (Integer newNumber : array) {
        if (ht.get(newNumber) == null) {
            ht.put(newNumber, 1); 
        } else {
            ht.put(newNumber, ht.get(newNumber) + 1);
         }

    }

  System.out.println(ht);
 // now iterate the map
 for (Map.Entry<String, Integer> entry : map.entrySet()) {
    Integer number = entry.getKey();
    Integer count = entry.getValue();
    if (count > 1) {
        System.out.println("Number: " + number + "count: " + count);
    }
  }
}
}
package com.stackoverflow.java;
导入java.util.array;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Map.Entry;
公共类重复计数{
公共静态void main(字符串[]args){
int[]数组=新的int[]{12,0,-22,0,43545,-4,-55,12,43,0,-999,-87};
//取hashmap累加每个数对应的couter
HashMap ht=新的HashMap();
for(整数newNumber:array){
if(ht.get(newNumber)==null){
ht.put(新编号,1);
}否则{
ht.put(newNumber,ht.get(newNumber)+1);
}
}
系统输出打印项次(ht);
//现在迭代映射
对于(Map.Entry:Map.entrySet()){
整数=entry.getKey();
整数计数=entry.getValue();
如果(计数>1){
System.out.println(“编号:+Number+”计数:+count);
}
}
}
}

您可以使用
HashMap
简单排序
进行排序,因为您的注释简单方法如下所示

  int[] array = new int[]{12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87};
                int counter = 0, 
                temp = 0;//variable that holds the temporary value of each element
                Arrays.sort(array);
                temp=array[0];
                int count=1;
                for(int i=1;i<array.length;i++)
                {
                    //System.out.println(array[i]);
                    if(temp==array[i])
                    {
                        count++;
                    }
                    else
                    {
                        if(count==1)
                        {
                            count=1;

                        }
                        else{
                        System.out.println(array[i-1]+" "+count);
                        count=1;
                        }
                        temp=array[i];
                    }
                }
int[]数组=新的int[]{12,0,-22,0,43545,-4,-55,12,43,0,-999,-87};
int计数器=0,
温度=0//保存每个元素的临时值的变量
数组。排序(数组);
temp=数组[0];
整数计数=1;
对于(inti=1;i,以下是我的版本:

 Integer[] arr = {1,2,2,2,1,3,5,4,1};
 Arrays.stream(arr).distinct()
                   .forEach(x -> System.out.println(x + " appears " + Collections.frequency(Arrays.asList(arr), x) + " times."));

我们从游戏中删除重复的元素,这样我们就剩下了唯一的元素,然后对于我们流中的每个唯一元素,我们打印出它在原始数组中出现的时间。

这个问题有很多解决方案。我将列出其中一些作为起点,但将编码留给您

  • 使用
    HashMap
    并将
    存储在映射中
  • 如果不允许使用映射,可以执行双循环并检查所有出现的情况,即O(n2)
  • 稍微好一点的修改是先对数组排序,然后比较连续的元素
  • 您可以使用
    Collections.frequency()
    ,但这将对列表进行操作,因此可以转换数据结构(可能是通过流)

  • 一旦你使用了这些方法中的任何一种,你就可以过滤掉频率为1的数字。

    使用Hashmap和increment键可能重复的“不要复杂化”,我会在下面马上公布答案。我忘了提到,这是我老师的作业,我不允许使用Hashmap,只允许使用条件语句,谢谢这个问题是重复的,已经由@AnindyaDutta给出了答案。我看不出这么多答案有任何意义。它仍然打印所有元素,而不仅仅是重复的元素themselves@Alinionut你能试试我在下面贴的吗?@LalitVerma输出应该只打印出现多次的数字,只打印那些,谢谢。@LalitVerma现在可以了,非常感谢。您好,我不能使用任何方法或类,只能使用循环和条件语句,谢谢您。好吧,如果没有人回答,我会在早餐后编辑我的帖子。@Alinionut但您使用的是
    Arrays.sort()
    …@Fureeish他可能需要自己实现简单的排序方法。是的,对不起,除了array.sort(),我不能使用其他方法。