Эквивалент для X, Y в Z в Java - PullRequest
0 голосов
/ 02 декабря 2019

В питоне вы можете использовать структуру for x in [a, b, c, d] для циклов. Это может быть воспроизведено с помощью цикла foreach в java.

А что если я захочу повторить цикл for x, y in z, такой как приведенный ниже, в java?

for x_off, y_off in ( (1, 2), (-1, 2), (1, -2), (-1, -2), (2, 1), (-2, 1), (2, -1), (-2, -1) ):
    #do something

Ответы [ 2 ]

1 голос
/ 02 декабря 2019

Вы должны создать класс для хранения трех значений:

final class Point3D {
    private final int x, y, z;
    // constructor, getters, and equals/hashCode/toString here
}

Затем вы можете использовать инициализатор массива с расширенным циклом for:

for (Point3D point : new Point3D[] { new Point3D(1, 1, 1), new Point3D(-1, 1, 1),
                                     new Point3D(-1, -1, 1), new Point3D(1, -1, 1) }) {
    // code here
}

Он читается лучше, если высоздать массив отдельно, особенно если есть много точек:

Point3D[] points = {
        new Point3D( 1,  1,  1), new Point3D(-1,  1,  1),
        new Point3D(-1, -1,  1), new Point3D( 1, -1,  1),
        new Point3D( 1,  1, -1), new Point3D(-1,  1, -1),
        new Point3D(-1, -1, -1), new Point3D( 1, -1, -1)
};
for (Point3D point : points) {
    // code here
}
1 голос
/ 02 декабря 2019

Я просто использовал переменные для каждого индекса. Но это не будет полезно для двумерных массивов с большим количеством для каждого внутреннего массива.

int[][] offsets = new int[][] { {0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1} };

for(int[] offset: offsets) {
    int x = offset[0], y = offset[1];
    // do something with x and y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...