在java Array中查找重复项

时间:2011-09-30 00:02:36

标签: java loops for-loop

无论如何,我有一个非常简单的java程序来查明数组中的2个对象是否相同。然而,当我运行它时,一组唯一对象总是返回1错误,如果我添加更多对象,它就像正常一样。

这是代码;

int[] array= new int[] {1,245,324,523};

    int size = array.length;
    int error=0;
    System.out.println(error);

    int i = 0;
    for(i=0; i<size; i++){

        if(array[0] == array[i]){
            error= error +1;
        }
        System.out.println(error);
    }

8 个答案:

答案 0 :(得分:5)

1错误是因为您将array[0]array[0]进行比较,这当然等于它自己。

如果要查找所有成对重复项,则需要进行双循环:

for(int i=0;i<size;i++){
    for(int j=i+1;j<size;j++){
        if(array[i] == array[j]){
            if(i!=j){
                error = error + 1;
            }
        }
    }
}

您会注意到此代码中的一些内容:

  • j从i + 1开始,而不是从0开始。
  • error仅在i!= j
  • 时递增

第一个是因为你轮流使用数组中的每个元素来与每个其他元素进行比较。当轮到它时(在外环中),它已经被比作之前的元素,不应该再与它们进行比较。

第二个是因为你最终会为每个外环比较一个元素。您不希望将其计为error

答案 1 :(得分:1)

你从0开始。因此,第一个测试是if(array[0] == array[0]);)

答案 2 :(得分:0)

你总是会得到至少一个错误,因为array[0] == array[i]在第一次迭代时为真,当i = 0时。

答案 3 :(得分:0)

尝试双重嵌套for循环。像这样的东西

for (int i=0;i<size-1;i++){
  for (int j=i+1; j<size; j++) {
    error += (array[i] == array[j]) ? 1 : 0;
  }
}

答案 4 :(得分:0)

的代码中
int i=0;
for(i=0;i<size;i++){
    if(array[0]==array[i]){    //this condition runs true only for the first time. as i=0 here
        error=error+1;
    }
    System.out.println(error); //now here you had put the println(error) outside the if()-condition therefore it will be printed repeatedly value of error which is 1
}

答案 5 :(得分:0)

你还需要“思考Java”。使用Array.equals进行比较。请参阅文档here和一些示例here

答案 6 :(得分:0)

如果您打算使用任何集合,您可以轻松找到数组中的重复项

示例:

 public static void main(String[] args) {
    boolean containsDuplicate =false;
    int[] intArray = new int[] {1,245,324,1,523};
    List<Integer> myObj = new ArrayList<Integer>();
    for(int id : intArray){
        if(myObj.contains(id)){
            containsDuplicate = true;
            System.out.println("Duplicate");
        }else{
            myObj.add(id);
        }
    }

}

答案 7 :(得分:0)

以下代码没问题,但返回11。 不确定它是否是预期的。

public static void main(String[] args){
    int[] array = {23, 23, 0, 43, 545, 12, -55, 43, 12, 12, -999, -87, 12, 0, 0};
    int error = 0;
    for(int i=0;i<array.length;i++){
        for(int j=i+1;j<array.length;j++){
            if(array[i] == array[j]){
                if(i!=j){
                    error = error + 1;
                }
            }
        }
    }
    System.out.println(error);
}

我提出一点点复杂但希望更先进的解决方案。

package myjavaprogram;
import java.util.Arrays;

public class TestClass1 {
    public static void main(String[] args){
        int[] array = {23, 23, 0, 43, 545, 12, -55, 43, 12, 12, -999, -87, 12, 0, 0};
        //int[] array = {23, -22, 0, 43, 545, 12, -55, 43, 12, 0, -999, -87, 12};
        //int[] array = {23, -22, 0, 23};
        //int[] array = {23, -22, 23};
        calculate_duplicates(array);        
    }

    private static void calculate_duplicates(int[] array) {
        calculateUniqueNumbers(array);
    }

    private static void calculateUniqueNumbers(int[] array) {
        Pair[] pairs = new Pair[array.length];
        initializePairsAtrray(pairs, array);
        printPairsAtrray(pairs);

        System.out.println("array.length="+array.length);
        System.out.println("--------------------");

        // update pairs array taking in account duplicates duplicates
        for(int i = 0; i < array.length; i++) {
            System.out.println("array[i]="+array[i] + " i="+i);
            for(int j = i+1; j < array.length; j++) {
                System.out.println("array[j]="+array[j]+" j="+j);

                if(array[i] == array[j] && pairs[j].useDuringCount == true) {
                    pairs[i].occurance_num++;

                    pairs[j].occurance_num = 0;
                    pairs[j].useDuringCount = false;
                }

                if(array[i] == 0) {
                    pairs[i].occurance_num = 0;                    
                }
                if(array[j] == 0) {
                    pairs[j].occurance_num = 0;
                    pairs[j].useDuringCount = false;
                }                
            }
            pairs[i].useDuringCount = false;
            System.out.println("--------------------");
        }                
        printPairsAtrray(pairs);

        // calculate general number of duplicates (numbers whick are repeated 
        // in initial array)
        System.out.println("Duplicates in array:"+
                calculateDuplicatesNumber(pairs));        
    }

    private static void initializePairsAtrray(Pair[] pairs, int[] array) {
        for(int i=0;i<pairs.length;i++) {
            Pair p = new Pair();            
            p.occurance_num = 1;
            p.value = array[i];
            p.useDuringCount = true;
            pairs[i] = p;
        }
    }

    private static void printPairsAtrray(Pair[] pairs) {
        System.out.println("--------------------");
        for(int i=0;i<pairs.length;i++) {
            System.out.println("pairs["+i+"].occurance_num="+pairs[i].occurance_num);
            System.out.println("pairs["+i+"].value="+pairs[i].value);
            System.out.println("pairs["+i+"].useDuringCount="+pairs[i].useDuringCount);
            System.out.println("--------------------");
        }
    }

    private static int calculateDuplicatesNumber(Pair[] pairs) {
        System.out.println("-------------------- Duplicates:");
        int duplicates_num = 0;
        for(int i=0;i<pairs.length;i++) {
            if(pairs[i].occurance_num > 1) {
                duplicates_num++;
                System.out.println("number: "+pairs[i].value+" occurance_num " + pairs[i].occurance_num);
            }
        }
        return duplicates_num;
    }        
}    

class Pair {
    int value;
    int occurance_num;
    boolean useDuringCount;
}

尼古拉麦梅斯