javaarrayscompareelementbetween

comparing elements of the same array in java


I am trying to compare elements of the same array. That means that i want to compare the 0 element with every other element, the 1 element with every other element and so on. The problem is that it is not working as intended. . What i do is I have two for loops that go from 0 to array.length-1.. Then i have an if statement that goes as follows: if(a[i]!=a[j+1])

for (int i = 0; i < a.length - 1; i++) {
    for (int k = 0; k < a.length - 1; k++) {
        if (a[i] != a[k + 1]) {
            System.out.println(a[i] + " not the same with  " + a[k + 1] + "\n");
        }
    }
}

Solution

  • First things first, you need to loop to < a.length rather than a.length - 1. As this is strictly less than you need to include the upper bound.

    So, to check all pairs of elements you can do:

    for (int i = 0; i < a.length; i++) {
        for (int k = 0; k < a.length; k++) {
            if (a[i] != a[k]) {
                //do stuff
            }
        }
    }
    

    But this will compare, for example a[2] to a[3] and then a[3] to a[2]. Given that you are checking != this seems wasteful.

    A better approach would be to compare each element i to the rest of the array:

    for (int i = 0; i < a.length; i++) {
        for (int k = i + 1; k < a.length; k++) {
            if (a[i] != a[k]) {
                //do stuff
            }
        }
    }
    

    So if you have the indices [1...5] the comparison would go

    1. 1 -> 2
    2. 1 -> 3
    3. 1 -> 4
    4. 1 -> 5
    5. 2 -> 3
    6. 2 -> 4
    7. 2 -> 5
    8. 3 -> 4
    9. 3 -> 5
    10. 4 -> 5

    So you see pairs aren't repeated. Think of a circle of people all needing to shake hands with each other.