7
votes

Définir une limite à une valeur int

Je veux définir une limite à un int que j'ai dans Java. Je crée un système de santé simple et je veux que ma santé reste entre 0 et 100. Comment puis-je faire cela?


7 commentaires

Pourquoi avez-vous besoin de définir une limite?


Je ne veux pas que ma santé passe sous 0, ou plus de 100.


Je suppose que vous voulez quelque chose un peu plus compliqué que Yourint = math.max (Yourint, 100); , alors s'il vous plaît pouvez-vous élaborer un peu plus sur la question?


Eh bien, recherchez des limites lorsque vous obtenez une entrée ou créez une classe spéciale HealTint pour le faire pour vous.


Pourquoi irait-il au-delà de ces limites?


Eh bien, parce que je ne l'ai pas fait, il n'ya pas encore plus de 0 ou plus de 100 ans? Mais ma question a été répondue.


Dupliqué possible de Java - Numéro limite entre min et max


7 Réponses :


13
votes

Je vous recommanderais de créer une classe appelée santé et que vous vérifiez à chaque fois si une nouvelle valeur est définie si elle remplit les contraintes:

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

}


7 commentaires

Merci, cela a fonctionné exactement comme je voulais. (Vous ne pouvez pas encore cliquer sur le bouton Accepter, devez attendre 6 minutes de plus.)


IllégalArgumentException est ce que vous voulez généralement utiliser pour des arguments illégaux comme celui-ci. Méthodes qui modélisent les choses que vous souhaitez faire dans une partie (comme l'ajout ou la suppression de la santé X sans aller au-delà des limites) sont essentielles sur une classe comme celle-ci aussi.


Oui, vous pouvez également utiliser IllegalArgumentException au lieu d'une expérience personnalisée.


J'utiliserais le Shatathavalue dans le constructeur afin qu'il ne soit pas à écrire deux fois, mais à part ça, tout est bon.


Je ne ferais pas cela puisque vous ne devriez pas appeler des méthodes excessives dans le constructeur.


Maintenant, vous pouvez le refloter cela afin que la partie "si" soit extraite sur une méthode externe. SEC :)


De plus, je ferais renommer le travail ici: variable "valeur" à "santé" et faire un renommage approprié avec le setter et le getter.



1
votes

encapsuler le champ et mettre une méthode d'enregistrement d'enregistrement.

int a;

void setA(int a){
   if value not in range throw new IllegalArgumentException();
}


0 commentaires

0
votes

Il n'y a aucun moyen de limiter une primitive en Java. La seule chose que vous puissiez faire est d'écrire une classe d'emballage pour cela. Bien sûr, en faisant cela, vous perdez le support de l'opérateur agréable et je dois utiliser des méthodes (comme biginteger ).


0 commentaires

6
votes

Utilisez un modèle getter / setter.

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


0 commentaires

0
votes
public void setHealth(int newHealth) {
  if(newHealth >= 0 && newHealth <= 100) {
    _health = newHealth;
  }
}

0 commentaires

3
votes

Je créerais une classe qui applique cela.

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


0 commentaires

-3
votes

Aucun point dans la création d'une classe spéciale. Pour incrémenter i, utilisez ceci:

Void public SpecialIncrement (int i) { Si (i <100) i ++ }


2 commentaires

Comment cela devrait-il répondre à la question?


Ne l'applique pas vraiment comme il serait trop facile d'oublier et d'incrémenter i sans utiliser le spécialiste.