枚举整数和名称

时间:2014-04-29 10:53:48

标签: java enums

我可以通过值或仅通过名称来处理枚举吗? 例如,我有一个机器人,用方向初始化" 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
    }
}

我的问题是,我怎样才能通过枚举中的数字来表示方向一次,而另一次用"向上向右下方"?

3 个答案:

答案 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;
}