Установка предела для значения int - PullRequest
3 голосов
/ 21 апреля 2011

Я хочу установить ограничение на значение int, которое есть в Java. Я создаю простую систему здравоохранения и хочу, чтобы мое здоровье оставалось между 0 и 100. Как я могу это сделать?

Ответы [ 7 ]

12 голосов
/ 21 апреля 2011

Я бы порекомендовал вам создать класс с именем Health и каждый раз проверять, установлено ли новое значение, если оно удовлетворяет ограничениям:

public class Health {

   private int value;

   public Health(int value) {
      if (value < 0 || value > 100) {
         throw new IllegalArgumentException();
      } else {
         this.value = value;
      }
   }

   public int getHealthValue() {
      return value;
   }


   public void setHealthValue(int newValue) {
    if (newValue < 0 || newValue > 100) {
         throw new IllegalArgumentException();
      } else {
      value = newValue;
    }
   }

}
4 голосов
/ 21 апреля 2011

Используйте модель геттера / сеттера.

public class MyClass{
    private int health;

    public int getHealth(){
        return this.health;
    }

    public int setHealth(int health){
        if(health < 0 || health > 100){
            throw new IllegalArgumentException("Health must be between 0 and 100, inclusive");
        }else{
            this.health = health;
        }
    }
}
3 голосов
/ 21 апреля 2011

Я бы создал класс, который обеспечивает это.

public class Health {
  private int health = 100;

  public int getHealth() {
    return health;
  }

  // use this for gaining health
  public void addHealth(int amount) {
    health = Math.min(health + amount, 100);
  }

  // use this for taking damage, etc.
  public void removeHealth(int amount) {
    health = Math.max(health - amount, 0);
  }

  // use this when you need to set a specific health amount for some reason
  public void setHealth(int health) {
    if (health < 0 || health > 100)
      throw new IllegalArgumentException("Health must be in the range 0-100: " + health);
    this.health = health;
  }
}

Таким образом, если у вас есть экземпляр Health, вы точно знаете, что он представляет действительное количество здоровья.Я полагаю, что вы обычно хотели бы просто использовать методы, такие как addHealth, а не устанавливать здоровье напрямую.

1 голос
/ 21 апреля 2011

инкапсулирует поле и ставит галочку в методе установки.

int a;

void setA(int a){
   if value not in range throw new IllegalArgumentException();
}
0 голосов
/ 21 апреля 2011

Нет смысла создавать специальный класс.Чтобы увеличить i, используйте это:

public void specialIncrement (int i) {if (i <100) i ++} </p>

0 голосов
/ 21 апреля 2011
public void setHealth(int newHealth) {
  if(newHealth >= 0 && newHealth <= 100) {
    _health = newHealth;
  }
}
0 голосов
/ 21 апреля 2011

Нет способа ограничить примитив в Java.Единственное, что вы можете сделать, это написать для этого класс-оболочку.Конечно, делая это, вы теряете хорошую поддержку оператора и вынуждены использовать методы (например, BigInteger).

...