【问题标题】:Only print every other enum value in for loop仅在 for 循环中打印每个其他枚举值
【发布时间】:2020-05-04 23:12:55
【问题描述】:

我正在尝试这样做,以便在我的 for 循环语句中仅打印出所有其他颜色,但由于类型差异,我无法将其合并到 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

【问题讨论】:

标签: java arrays foreach enums


【解决方案1】:

你可以使用ordinal()like

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++;
}

但这对于以2 递增的传统for 循环来说似乎是个好地方。喜欢,

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

所有三个都产生您请求的输出。

【讨论】:

  • 但是,Example.values() 每次都会返回一个新数组,因此您可能不想在循环中调用它。
  • @Andy 你可以使用变量,但无论如何都很好
  • @vyacheslav.kislov 是的。这正是重点。
【解决方案2】:

您可以使用 for 循环遍历所有其他颜色:

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

【讨论】:

    【解决方案3】:

    使用循环的另一种方式:

    boolean toggle = false;
    for (Example value : Example.values()) {
      if (toggle ^= true) System.out.println(value);
    }
    

    【讨论】:

    • 大声笑。我正要评论说这很恶心,但后来看到是谁写的:D
    【解决方案4】:

    您可以访问 Example.values() 并通过检查索引是否可被 2 整除来打印备用元素(即 index % 2 == 0)。

    使用Stream API 的演示:

    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
    

    ONLINE DEMO

    您可以使用传统的循环来代替IntStream

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 2019-08-25
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多