【问题标题】:How do i write a method that will loop through an enum an inputted number of times?我如何编写一个循环遍历枚举输入次数的方法?
【发布时间】:2015-03-13 22:26:30
【问题描述】:

我有这个枚举:

public enum Direction {
    NORTH, WEST, SOUTH, EAST;
}

还有这个方法:

public void turn(int n){
    for (int i = 0; i < n; i++){
        //Change compass direction n times
    }
}

我需要做的是逆时针将方向改变 90 度,输入“n”次。我设置了枚举,以便它以正确的顺序排列,我只是不确定如何制作它,因此当前值 compassDirection 可以通过枚举“n”次迭代来更改。

【问题讨论】:

  • 看看Direction.values() 返回什么...我会考虑向枚举本身添加方法以返回“此枚举值顺时针旋转 90 度”或“此枚举值旋转 90 度”逆时针”。命名很棘手,但您肯定要确保它并不意味着调用会改变现有值。对于实现,您可以使用ordinal() 计算出“this”是哪个值,然后使用values() 返回的数组来查找邻居。

标签: java loops methods enums


【解决方案1】:

如果我理解正确,您想遍历 enum 成员。

为此,每个enum 都有一个.values() 方法,该方法返回一个数组,其中包含按定义顺序排列的所有有效值。

所以

public void turn(int n){
    for (int i = 0; i < n; i++){
        for (Direction direction : Direction.values()) {
            // Do something with direction
        }
    }
}

你基本上实现了你想要的。


编辑:在你澄清之后,我认为你更喜欢

public void turn(int n){
    Direction[] directions = Direction.values()
    for (int i = 0; i < n; i++) {
        int direction_index = i % directions.length;
        Direction direction = directions[direction_index];
        // Do something with direction
    }
}

或

public void turn(int n){
    int i = 0;
    while (true) {
        for (Direction direction : Direction.values()) {
            if (i==n) return;
            i++
            // Do something with direction
        }
    }
}

【讨论】:

  • 我不确定我是否以最好的方式完整地描述了我的问题。我的意思是例如说我调用 turn(3),这意味着我希望我的变量 compassDirection 的值更改 3 次。 IE,如果我在北(0),我想循环通过turn()3次,使其向西(1),然后第二次向南(2),第三次向东(​​3)。我怎么能做到这一点?
【解决方案2】:

我认为您不需要在这里进行迭代。 你可以这样实现转弯:

public Direction turn(Direction initial, int turns)
{
    Direction[] dirs = Direction.values();
    return dirs[(initial.ordinal()+turns) % dirs.length];
}

在此代码中,您将获取当前元素在枚举中的索引,并根据转数获取结果的索引。通过结果索引,您可以生成一个枚举值。

【讨论】:

    【解决方案3】:
    public static void main(String[] args) {
        turn(6);
    }
    
    public static Direction turn(int n){
        Direction result = null;
        Direction[] values = Direction.values();
        for(int i = 0; i < n; i++){
            result = values[i % values.length];
            System.out.println(i + " " + result);
        }
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2023-03-31
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多