Все возможные комбинации массива int [] [] - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить только разные координаты, означающие, что координаты (6,7) и (7,6) совпадают.Как я могу пройти через массив и получить только различные координаты?Поэтому в основном мне нужны все комбинации координат из массива int[][].

ArrayList<Coords> coordinateList = new ArrayList<>();
int[][] coordinates = { {56,80}, {32,26}, {47,85}, {3,4}, {10,19}};


public void findDistinct(int[][] coordinates){
    for (int i = 0; i < coordinates.length; i++) {
        for (int j = 0; j < coordinates.length - 1 ; j++) {
            if (i == j) continue;
            Coords coords = new Coords(i, j);
            if(! coordinateList.contains(coords)){
                coordinateList.add(coords);
            }
        }
    }
    for(Coords coords: coordinateList){
        System.out.println(coords);
    }
}


public class Coords{

    private final x;
    private final y;

    public Coords(x,y) {
        this.y = y;
        this.x = x;
    }

    @Override
    public String toString() {
        return "Coords{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

Вывод, который я хотел бы получить:

Coords{x=0, x=1}
Coords{x=0, x=2}
Coords{x=0, x=3}
Coords{x=0, x=4}
Coords{x=1, x=2}
Coords{x=1, x=3}
Coords{x=1, x=4}
Coords{x=2, x=3}
Coords{x=2, x=4}
...

Но на данный момент я получаю всевозможных вариаций координат.Как я могу изменить код, чтобы получить нужный мне результат?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

координирует.List.contains (координирование) собирается проверить, совпадает ли хеш-код объекта или нет.Если вы хотите, чтобы метод метода проверял, совпадают или нет координаты двух объектов, вы внедрили метод хэш-кода и равно для координат класса.

Так как вам нужен уникальный список координат, рассмотрите возможность использования Задать структуру данных вместосписок, так как содержит операцию расходов

0 голосов
/ 03 декабря 2018
for (int j = 0; j < coordinates.length; j++) 

должно быть

for (int j = i + 1; j < coordinates.length; j++)

Таким образом, вам также больше не нужно проверять if (i == j)

...