Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写一个方法,使其在枚举中循环输入的次数?_Java_Loops_Methods_Enums - Fatal编程技术网

Java 如何编写一个方法,使其在枚举中循环输入的次数?

Java 如何编写一个方法,使其在枚举中循环输入的次数?,java,loops,methods,enums,Java,Loops,Methods,Enums,我有这个枚举: public enum Direction { NORTH, WEST, SOUTH, EAST; } 这种方法: public void turn(int n){ for (int i = 0; i < n; i++){ //Change compass direction n times } } public void turn(int n){ 对于(int i=0;i

我有这个枚举:

public enum Direction {
    NORTH, WEST, SOUTH, EAST;
}
这种方法:

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

我需要做的是逆时针改变方向90度,输入n次。我将枚举设置为正确的顺序,但我不确定如何才能使当前值compassDirection在遍历枚举“n”次时发生更改。

如果我理解正确,您希望遍历
enum
成员

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

所以

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

如果我理解正确,您希望迭代
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 Direction turn(Direction initial, int turns)
{
    Direction[] dirs = Direction.values();
    return dirs[(initial.ordinal()+turns) % dirs.length];
}

在这段代码中,您将在enum中获得当前元素的索引,并根据圈数获得结果的索引。通过结果索引,您可以生成枚举值。

我认为您不需要在这里进行迭代。
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;
}
您可以实现如下转向:

public Direction turn(Direction initial, int turns)
{
    Direction[] dirs = Direction.values();
    return dirs[(initial.ordinal()+turns) % dirs.length];
}
在这段代码中,您将在enum中获得当前元素的索引,并根据圈数获得结果的索引。通过结果索引,您可以生成枚举值。

publicstaticvoidmain(String[]args){
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;
}
转弯(6); } 公共静态方向转弯(int n){ 方向结果=空; 方向[]值=方向.值(); 对于(int i=0;i
公共静态void main(字符串[]args){
转弯(6);
}
公共静态方向转弯(int n){
方向结果=空;
方向[]值=方向.值();
对于(int i=0;i
看看
Direction.values()
返回的内容。。。我会考虑增加枚举本身的方法来返回“这个枚举值顺时针旋转90度”或“这个枚举值逆时针旋转90度”。命名很棘手,但您肯定要确保它并不意味着调用会改变现有的值。对于一个实现,您可以使用
ordinal()
计算出“this”是哪个值,然后使用
values()
返回的数组查找邻居。请查看
Direction.values()
返回的值。。。我会考虑增加枚举本身的方法来返回“这个枚举值顺时针旋转90度”或“这个枚举值逆时针旋转90度”。命名很棘手,但您肯定要确保它并不意味着调用会改变现有的值。对于一个实现,您可以使用
ordinal()
计算出“this”是哪个值,然后使用
values()
返回的数组查找邻居。我不确定我是否以最佳方式完整描述了我的问题。我的意思是,例如,我调用turn(3),这意味着我希望变量compassDirection的值改变3次。也就是说,如果我在北(0),我会想在转弯()处绕圈3次,先向西(1),然后第二次向南(2),第三次向东(3)。我怎样才能做到这一点?我不确定我是否以最好的方式完整地描述了我的问题。我的意思是,例如,我调用turn(3),这意味着我希望变量compassDirection的值改变3次。也就是说,如果我在北(0),我会想在转弯()处绕圈3次,先向西(1),然后第二次向南(2),第三次向东(3)。我怎样才能做到这一点?