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)。我怎样才能做到这一点?