2014-04-29 157 views
0

我可以通過值或只按名稱接近枚舉? 例如我有一個機器人,初始化方向「向上」 然後我想改變他的方向,向左轉,但它會更方便處理數字代表方向,而不是字符串「向右向下向左」 ...枚舉整數和名稱

枚舉類:

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

Robot類:

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 
    } 
} 

我的問題是,我如何通過枚舉代表的數量和其他的時間與「逼近方向一次UP RI GHT DOWN LEFT「?

+1

你的turnLeft方法似乎很奇怪。你希望它轉向一些全球定義的「左」而不是相對於它自己 –

回答

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