如何使用枚举为对象分配标志

我正在用 Java 创建一个棋盘游戏,并且我正在尝试编写一个方法来标记用户在游戏过程中选择的对象(对象代表棋盘上的一个图块)。该方法位于设置单个 Tile 在板上的值和位置的类中。


我认为使用枚举类型是个好主意,但我不确定如何实现这一点。在我的课程中,我有一些方法可以在网格上获取 Tile 的位置(行,列),以及它代表的字母。


public class Tile {


  private final String letter; //holds the letter value of the tile

  private final int row;       //holds tile row index

  private final int column;


  public Tile(String l, int r, int c) {

    this.letter = l;           

    this.row = r;

    this.column = c;

  }


  //setter&getter methods 


  public String toString() {

    return this.getLetter()+" "+ this.getRow() +

         "," + this.getColumn();

  }

所以在这个类中,我也想写一个方法来标记是否选择了一个 tile 对象......我在想如果 toString 方法返回一个语句,那么它可以用来表明 tile 已经被选中选择了。或者……我该怎么办。这是我到目前为止:


public enum Status {CHOSEN, NOTCHOSEN};


public static void tileStatus(Status stat){

  switch(stat) {

    case CHOSEN: //something

       break;

    case NOTCHOSEN: //something

       break;

  }

}


慕勒3428872
浏览 120回答 3
3回答

有只小跳蛙

您可以声明 enum 是Tile类的实例成员public class Tile {  private final String letter; //holds the letter value of the tile  private final int row;       //holds tile row index  private final int column;  private Status flag; // use getter and setter to set flag on using Status enum  public Tile(String l, int r, int c) {    this.letter = l;               this.row = r;    this.column = c;  }  //setter&getter methods   public String toString() {    return this.getLetter()+" "+ this.getRow() +         "," + this.getColumn();  }

紫衣仙女

向 Tile 添加布尔值可能会帮助您处理状态。由于只有两种可能的状态(已选择,未选择),因此布尔值可能更有意义。也不要默认添加 getter 和 setter。只有在你需要它们的时候。参考“讲不问原则”public class Tile {  private final String letter; //holds the letter value of the tile  private final int row;       //holds tile row index  private final int column;  private boolean isTileFlagged;  public Tile(String l, int r, int c) {    this.letter = l;               this.row = r;    this.column = c;    isTileFlagged = false; // May be false to being with  } // add getters/setters only when necessary  public void toggleFlaggedState(){      isTileFlagged = !isTileFlagged;  }  public String toString() {    return this.getLetter()+" "+ this.getRow() +         "," + this.getColumn();  } // add hashcode, equals if necessary此外,如果枚举是必要的,它可能是 Tile 类的内部状态,因为它的独立存在可能没有意义。

翻过高山走不出你

使enum作为成员变量class和方法的enum。像下面这样:-package com.robo.lab;public class Tile {    private final String letter; // holds the letter value of the tile    private final int row; // holds tile row index    private final int column;    private Status status;    public Tile(String l, int r, int c,Status status) {        this.letter = l;        this.row = r;        this.column = c;        this.status=status;    }    // setter&getter methods    public Status getStatus() {        return status;    }    public void setStatus(Status status) {        this.status = status;    }    public String toString() {        return this.getLetter() + " " + this.getRow() + "," + this.getColumn()+","+this.getStatus();    }    public String getLetter() {        return letter;    }    public int getRow() {        return row;    }    public int getColumn() {        return column;    }}package com.robo.lab;public enum Status {    CHOSEN, NOTCHOSEN;    public static void tileStatus(Status stat) {        switch (stat) {        case CHOSEN: // something            break;        case NOTCHOSEN: // something            break;        }    }}package com.robo.lab;public class Main {    public static void main(String[] args) {        // TODO Auto-generated method stub        Tile obj1= new Tile("AUser", 1, 1,Status.CHOSEN);        System.out.println(obj1.toString());        Tile obj2= new Tile("BUser", 1, 1,Status.NOTCHOSEN);        System.out.println(obj2.toString());    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java