Как использовать перечисления для назначения флага объекту - PullRequest
0 голосов
/ 07 ноября 2018

Я создаю настольную игру в java и пытаюсь написать метод, который помечает выбранный объект (объект представляет плитку на доске) пользователем во время игры. Этот метод находится в классе, который устанавливает значение и позицию одной плитки на доске.

Я думаю, что использование перечислимых типов было бы хорошей идеей, но я не уверен, как именно это реализовать. В моем классе есть методы, которые получают позицию тайла (строка, столбец) на сетке и букву, которую он представляет.

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

Итак, внутри этого класса я также хочу написать метод, который помечает, выбран или нет объект мозаики ... Я думал, что если метод toString возвращает оператор, то его можно использовать, чтобы показать, что плитка была выбрана. Или ... как я должен идти об этом. Это то, что я до сих пор:

public enum Status {CHOSEN, NOTCHOSEN};

public static void tileStatus(Status stat){
  switch(stat) {
    case CHOSEN: //something
       break;
    case NOTCHOSEN: //something
       break;
  }
}

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Добавление логического значения в плитку может помочь вам с состоянием. Поскольку существует только два возможных состояния (выбрано, а не выбрано), логическое значение может иметь больше смысла. Также не добавляйте геттеры и сеттеры по умолчанию. Только когда они вам нужны. См. «принцип« не спрашивай »»

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, поскольку его независимое существование может не иметь смысла.

0 голосов
/ 07 ноября 2018

Сделать 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());

    }

}
0 голосов
/ 07 ноября 2018

вы можете объявить, что enum является членом экземпляра Tile class

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();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...