我尝试在数组中找到重复的数字,但我有一个问题 如果数组中的数字重复超过2个数字,它将像这样打印
重复号码是:40
重复号码是:40
不正确。 所以,我只想打印重复的数字和它们出现的数量。 这是我的代码。
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] x = {
10, 20, 30, 40, 40, 40, 25
};
int count = 0;
for (int i = 1; i < x.length; i++) {
if (x[i - 1] == x[i]) {
System.out.println("Dupicate number is :" + x[i]);
count++;
}
}
System.out.println(count);
}
答案 0 :(得分:1)
将数组成员放在一个保持计数的hashmap中。 然后迭代地图。所以你也发现了所有的副本。
public static void main(String[] args)
{
int[] x = { 10, 20, 30, 40, 40, 40, 25 };
Map<Integer, Integer> count = new HashMap<>();
for (int i = 1; i < x.length; i++) {
// if (count.containsKey(x[i]) && (x[i] == x[i-1]) ) {
// use this if the duplicates must be consecutive
if (count.containsKey(x[i])) {
count.put(x[i], count.get(x[i]) + 1);
} else {
count.put(x[i], 1);
}
}
for (Entry<Integer, Integer> entry : count.entrySet()) {
if (entry.getValue() > 1) {
System.out.println("Dupicate number is :" + entry.getKey() + " " + entry.getValue() + " occurences");
}
}
}
修改强> 在评论中添加了对连续重复的修改,但这只找到了最后一个重复的
答案 1 :(得分:0)
从Java Util使用${initParam['myconstantkey']}
:
HashSet
现在newArr只包含非重复元素。
没有。重复项= // x is name of your array
int[] x = {
3, 4, 4, 5, 6
};
HashSet < Integer > mySet = new HashSet < Integer > ();
ArrayList < Integer > dlist = new ArrayList < Integer > ();
for (int val: x) {
if (!mySet.add(val)) {
dlist.add(val);
}
}
for (int i = 0; i < dlist.size(); i++) {
System.out.println(dlist.get(i));
}
答案 2 :(得分:-1)
一个实用的解决方案是使用集合:
将数组转换为列表,
方法Collections.frequency(a, b)
将返回集合a中b的存在方式,因此您需要迭代列表,然后使用该方法的结果填充地图
public static void main(String[] args) {
int[] x = { 10, 20, 30, 40, 40, 40, 25 };
List<Integer> myInts = new ArrayList<Integer>();
for (int index = 0; index < x.length; index++) {
myInts.add(x[index]);
}
Map<Integer, Integer> ss = new HashMap<Integer, Integer>();
for (int index = 0; index < x.length; index++) {
if (Collections.frequency(myInts, x[index]) > 1) {
ss.put(x[index], Collections.frequency(myInts, x[index]));
}
}
System.out.println(ss);
}
该代码将打印
{40 = 3}
这实际上就是你要找的东西。