我可以通过值或仅通过名称来处理枚举吗? 例如,我有一个机器人,用方向初始化" UP" 然后我想改变他的方向,向左转,但是处理代表方向的数字而不是字符串会更加方便"向右下方" ...
枚举类:
package Q1;
public enum Direction{
UP(1), RIGHT(2), DOWN(3), LEFT(4);
private final int dir;
//constructor for Direction enum for a robot
private Direction(int dir){
this.dir = dir;
}
//return facing direction of a robot
public int getDirection(){
return this.dir;
}
//return the direction for represented number
public Direction getDirFromNumber(){
return this.dir;
}
}
机器人类:
package Q1;
public class Robot {
static int IDGenerator = 1000; //ID generator for class Robot
int RoboID; //The ID of the robot
Direction direction; //The Direction the robot is facing
//Constructor for Robot
public Robot(Direction dir){
this.direction = dir;
this.RoboID = IDGenerator;
IDGenerator++;
}
//Turning the robot left
public void turnLeft(){
if (direction.getDirection()==1)
this.direction = Direction.LEFT;
else this.direction
}
}
我的问题是,我怎样才能通过枚举中的数字来表示方向一次,而另一次用"向上向右下方"?
答案 0 :(得分:3)
您可以自由地实施这种方法。
在你的情况下,像
public static Direction getDirection(int number){
return Direction.values()[number-1];
}
但为什么这样更方便?枚举的全部意义在于避免使用魔法数字(或字符串)。
我认为你真正想要的是一个方向,当你向左或向右转时,它会返回方向。
public Direction turnLeft(){
switch(this){
case LEFT: return DOWN;
case DOWN: return RIGHT;
case RIGHT: return UP;
case UP: return LEFT;
}
}
答案 1 :(得分:0)
样本用法
//Turning the robot left
public void turnLeft(){
this.direction = Direction.getDirFromNumber(1);
}
符合此需求的修改枚举方法是
public static Direction getDirFromNumber(int n){
Direction[] dir = Direction.values();
for(int i=0;i<dir.length;i++){
if(dir[i].getDirection() == n){
return dir[i];
}
}
return null;
}
答案 2 :(得分:0)
要获取某个数字的枚举值,您必须自己实现该方法。例如,循环遍历枚举值并选择具有正确数字的值。例如
//return the direction for represented number
public static Direction getDirFromNumber(int direction){
for (Direction dir : Direction.values()) {
if (dir.getDirection() == direction) {
return dir;
}
}
return null;
}