为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2022-01-06 17:48:13
我正在用 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;  }}
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您可以声明 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();

  }


查看完整回答
反对 回复 2022-01-06
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

向 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 类的内部状态,因为它的独立存在可能没有意义。


查看完整回答
反对 回复 2022-01-06
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

使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());


    }


}


查看完整回答
反对 回复 2022-01-06
  • 3 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信