Java 未检测int数组中的所有重复项
在对一个整数数组进行排序之后,Java 未检测int数组中的所有重复项,java,Java,在对一个整数数组进行排序之后,“arr”我尝试识别数组中的重复项。它对数组的一部分执行此操作,但不识别整个数组中的重复项。我感谢你的帮助。这是我的密码: import java.util.*; public class Ex24 { public static void main(String[] args) { int i, n = 100; Integer[] arr = Collections.nCopies(n, 0).toArray(new Integer[0]);
“arr”
我尝试识别数组中的重复项。它对数组的一部分执行此操作,但不识别整个数组中的重复项。我感谢你的帮助。这是我的密码:
import java.util.*;
public class Ex24 {
public static void main(String[] args) {
int i, n = 100;
Integer[] arr = Collections.nCopies(n, 0).toArray(new Integer[0]);
// int[] array = {0};
for (int j = 0; j < n ; j++){
arr[j] = (int) (Math.random() * 365 + 1);
// System.out.print(j + " " + arr[j] + "\n");
}
Arrays.sort(arr); //sort the arr
// String arrq = (Arrays.toString(arr));
System.out.println("\n");
Duplicate(arr, n);
}
static void Duplicate(Integer[] arr, int n) {
int j = 0;
for (int i = 0; i < n-1 ; i++) {
if (arr[i] != arr[i+1]) {
System.out.println(" at i (" + i + ") print arr[i] " + arr[i]);
}
else {
j = j +1;
System.out.println(" j = " + j + " at i (" + i + ") arr[i] is double at date " + arr[i]);
}
}
}
}
import java.util.*;
公共类Ex24{
公共静态void main(字符串[]args){
int i,n=100;
整数[]arr=Collections.nCopies(n,0).toArray(新整数[0]);
//int[]数组={0};
对于(int j=0;j
因为您正在比较整数对象,所以:
if (arr[i] != arr[i+1])
这样做:
if (!arr[i].equals(arr[i+1]))
请理解=
或=
运算符用于比较基本体或比较对象引用,而不是比较实际对象值
顺便说一句,你的代码需要一些重构。如果您真的想查找重复项,有一些更好的方法,比如使用
java.util.Set
,而不是对数组进行排序以查找重复项。问题在于您使用=
比较整数
引用。(或者更确切地说,!=
)
==
和=当操作数是引用类型表达式时,代码>运算符将始终比较引用-它们比较两个操作数是否引用了完全相同的对象,而不是它们是否引用了相等的对象
Java中的装箱保证对-127到127范围内的值使用Integer
对象缓存,这就是为什么您看到它对某些值有效。除此之外(或某些点1),您将看到不同的Integer
对象,这些对象在简单地通过引用进行比较时不会作为相等对象进行比较。您希望改为使用equals
方法比较值相等:
if (!arr[i].equals(arr[i+1]))
1确切的边界是特定于实现的:某些实现可能具有更大的缓存。您正在将对象与==
进行比较,这有什么不对
if (arr[i] != arr[i+1]) {
使用Integer解决此特定问题的两种方法:
一,
二,
我认为这是一个学习使用调试器的绝佳机会。请编辑您的帖子,去掉不相关的行(注释掉的行),并使代码缩进更容易阅读。如果你能让你的示例代码包含一个失败的特定集合,而不是仅仅使用一个随机集合,那也会有很大帮助。Jon:你说“如果你能让你的示例代码包含一个失败的特定集合,而不是仅仅使用一个随机集合,那也会有很大帮助。”谢谢大家..解决方案很好..如何检测类似的三重元素..@munir 1。为了
if (!arr[i].equals(arr[i+1])) {
if (arr[i].intValue() != arr[i+1].intValue()) {