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()) {