Java - limiter le nombre entre min et max
Je veux retourner le nombre, tant qu'il tombe à l'intérieur d'une limite, d'autre le retour de la valeur maximale ou minimale de la limite. Je peux le faire avec une combinaison de Math.min
et Math.max
.
public int limit(int value) {
return Math.max(0, Math.min(value, 10));
}
Je me demandais si il y a un existant limit
ou range
fonction je suis surplombant.
3ème partie des bibliothèques de bienvenue si elles sont assez communes (ex: Communes ou de Goyave)
- Pourquoi est-ce nécessaire si
Math.min
Math.max
offre votre solution? - C'est le modèle approprié. Si vous faites cela dans beaucoup d'endroits, il suffit de définir votre propre méthode dans une classe d'assistance.
- Si ce code vous semble trop long, juste l'emballer dans votre propre fonction.
- Je suis venue à la communauté de voir si une telle fonction existe déjà. Juste une question.. je ne pense pas que c'est une mauvaise question?
- C'est plutôt une question triviale, mais personne n'a voté pour la fermer encore.
- Pas une mauvaise question. Vous montrer ce qu'ont fait jusqu'à présent, et de vous demander précisément si il est une méthode de solution. Personne ne veut avoir ignorants par réinventer la roue quand une solution plus simple existe. Je ne sais pas pourquoi il a été downvoted, mais I +1 ed pour aider à contrer.
- Je me demandais la même chose. Il semble vraiment simple. J'imagine que c'est juste quelque chose que les mathématiciens s'attendrait à être déjà construit à la bibliothèque de mathématiques.
- Il n'y a pas vraiment de meilleure façon de le faire dans le C-en fonction des langues, au court d'une fonction définie. Selon vos préférences, vous pouvez utiliser la fonction min/max, peut-code un ou deux
if
déclarations, etc. Aucun de ceux-ci est inhérente à la "bonne" ou "mauvaise" façon.
Vous devez vous connecter pour publier un commentaire.
De la version 21, Goyave comprend
Ints.constrainToRange()
(et des méthodes équivalentes pour les autres primitives). À partir de la notes de version:Copié à partir de https://stackoverflow.com/a/42968254/122441 par @dimo414.
Malheureusement, cette version est assez récente en juillet 2017, et dans certains projets (voir https://stackoverflow.com/a/40691831/122441) Goyave avait cassé la compatibilité descendante qui m'a obligé à rester sur la version 19 pour l'instant. Je suis aussi choqué que ni Commons Lang, ni les Communes de Maths il a! 🙁
OP demande à ce que cette mise en œuvre dans une bibliothèque standard:
Dommage la bibliothèque Mathématique standard ne dispose pas de telles
(min <= value <= max)
, beaucoup à la consternation des débutants.int ensureRange(int value, int min, int max) { return Math.min(Math.max(value, min), max); }
C'est une bonne raison de l'avoir dans une bibliothèque. Donc vous pouvez avoir de mal qu'une seule fois 😉min
exécutée avantmax
. Lire l'ordre != L'ordre d'exécution.Si vous êtes sur Android, utilisez le MathUtils (dans la bibliothèque de prise en charge), il n'a qu'une fonction plus précisément de ce qu'on appelle la pince.
MathUtils.clamp( value, min, max )
La
Math.max(int a, int b)
fonction est définie par:De sorte que vous pouvez faire une combinaison de la
max
etmin
fonctions comme suit:Méthode générique pour toute classe implémentant
Comparable
(y comprisNumber
et de ses sous-classes):La seule exigence est que tous les arguments doivent être de la même classe. Il empêche la conversion de type de perte.
En fait, il est inexact de comparer
float
avecdouble
delong
avecint
etc. Par exemple(double) 0.1 != (float) 0.1
.Utilisation:
Malheureusement, il est impossible de modifier le premier argument directement par juste
limit(x, 12.0, 13.0)
parce que les types primitifs sont immuables.Cela a été fait à l'aide de kotlin, j'espère que ça aide quand même!
Vous n'avez pas besoin d'une bibliothèque externe pour cela, essayez ce test:
}