我如何编写一个方法来循环遍历枚举输入的次数?
How do i write a method that will loop through an enum an inputted number of times?
我有这个枚举:
public enum Direction {
NORTH, WEST, SOUTH, EAST;
}
和这个方法:
public void turn(int n){
for (int i = 0; i < n; i++){
//Change compass direction n times
}
}
而我需要做的是将输入的"n"次逆时针方向改变90度。我设置了枚举,以便它以正确的顺序排列,我只是不确定如何才能做到这一点,以便可以通过迭代枚举 "n" 次来更改当前值 compassDirection。
如果我没理解错的话,你想遍历 enum
个成员。
为了做到这一点,每个 enum
都有一个 .values()
方法,其中 returns 一个包含所有有效值的数组,按定义的顺序排列。
所以
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
}
}
}
我认为您不需要在这里进行迭代。
你可以这样实现转弯:
public Direction turn(Direction initial, int turns)
{
Direction[] dirs = Direction.values();
return dirs[(initial.ordinal()+turns) % dirs.length];
}
在此代码中,您将获取当前元素在枚举中的索引,并根据轮数获得结果的索引。通过结果索引,您可以生成一个枚举值。
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 enum Direction {
NORTH, WEST, SOUTH, EAST;
}
和这个方法:
public void turn(int n){
for (int i = 0; i < n; i++){
//Change compass direction n times
}
}
而我需要做的是将输入的"n"次逆时针方向改变90度。我设置了枚举,以便它以正确的顺序排列,我只是不确定如何才能做到这一点,以便可以通过迭代枚举 "n" 次来更改当前值 compassDirection。
如果我没理解错的话,你想遍历 enum
个成员。
为了做到这一点,每个 enum
都有一个 .values()
方法,其中 returns 一个包含所有有效值的数组,按定义的顺序排列。
所以
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
}
}
}
我认为您不需要在这里进行迭代。 你可以这样实现转弯:
public Direction turn(Direction initial, int turns)
{
Direction[] dirs = Direction.values();
return dirs[(initial.ordinal()+turns) % dirs.length];
}
在此代码中,您将获取当前元素在枚举中的索引,并根据轮数获得结果的索引。通过结果索引,您可以生成一个枚举值。
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;
}