Печатайте только все остальные значения перечисления в цикле for - PullRequest
3 голосов
/ 05 мая 2020

Я пытаюсь сделать так, чтобы в моем операторе for l oop печатался только каждый другой цвет, но из-за разницы типов я не могу включить его в оператор if.

public enum Example{Red, Blue, Green, Yellow, Orange, Purple, Brown}

public class Test {
    public static void main(String[] args) {
        for (Example colour: Example.values()) {
            if (????) {
                System.out.println(colour);
            }
        }
    }
}

Желаемый результат:

Red Green Orange Brown

Ответы [ 4 ]

2 голосов
/ 05 мая 2020

Вы можете использовать ordinal() как

for (Example colour : Example.values()) {
    if (colour.ordinal() % 2 == 0) {
        System.out.println(colour);
    }
}

Или вы можете использовать внешнюю переменную для хранения счетчика. Что-то вроде

int i = 0;
for (Example colour : Example.values()) {
    if (i % 2 == 0) {
        System.out.println(colour);
    }
    i++;
}

Но это похоже на хорошее место для традиционного for l oop, которое увеличивается на 2. Например,

for (int i = 0; i < Example.values().length; i += 2) {
    System.out.println(Example.values()[i]);
}

Все три производят запрошенный вами результат.

1 голос
/ 05 мая 2020

Другой способ использования al oop:

boolean toggle = false;
for (Example value : Example.values()) {
  if (toggle ^= true) System.out.println(value);
}
0 голосов
/ 05 мая 2020

Использование Java 8:

import java.util.stream.IntStream;

enum Example{Red, Blue, Green, Yellow, Orange, Purple, Brown}

public class Main {
    public static void main(String[] args) {
        IntStream.range(0, Example.values().length)
        .filter(i -> i % 2 == 0)
        .forEach(i->System.out.println(Example.values()[i]));
    }
}

Вывод:

Red
Green
Orange
Brown
0 голосов
/ 05 мая 2020

Вы можете использовать вместо l oop для перебора всех остальных цветов:

for (int i =0; i< Example.values().length;i+=2){
    System.out.println(Example.values()[i]);
}
...