Como verificar se um inteiro está em um determinado intervalo?

Esperando por algo mais elegante do que

if (i>0 && i<100) 

Você poderia adicionar espaçamento;)

 if (i > 0 && i < 100) 

eu acho que

 if (0 < i && i < 100) 

é mais elegante. Parece a equação matemática.

Se você está procurando algo especial, você pode tentar:

 Math.max(0, i) == Math.min(i, 100) 

pelo menos, usa biblioteca.

Para aqueles que usam commons lang, uma opção é usar Range :

 Range myRange = Range.between(100, 500); if (myRange.contains(200)){ // do something } 

Veja também: como construir um apache commons 3.1 Range object

Eu não vejo como isso não é elegante, mas se você repetir a expressão frequentemente, então é uma boa ideia colocá-la em um método, por exemplo

 class MathUtil { public static boolean betweenExclusive(int x, int min, int max) { return x>min && x 

Isto é particularmente verdadeiro se você misturar comparações exclusivas e inclusivas. O nome do método pode ajudar a evitar erros de digitação, como usar

Esse cara fez uma boa aula de Range .

Seu uso, no entanto, não renderá código bom, pois é uma class genérica. Você teria que digitar algo como:

 if (new Range(0, 100).contains(i)) 

ou (um pouco melhor se você implementar primeiro):

 class IntRange extends Range .... if (new IntRange(0,100).contains(i)) 

Semanticamente, ambos são melhores do que o que o Java oferece por padrão, mas a sobrecarga de memory, a degradação do desempenho e mais digitação geral valem a pena. Pessoalmente, eu gosto mais da abordagem de mdma .

Se você está procurando algo mais original do que

 if (i > 0 && i < 100) 

você pode tentar isso

 import static java.lang.Integer.compare; ... if(compare(i, 0) > compare(i, 100)) 
 if ( 0 < i && i < 100) if ( 'a' <= c && c <= 'z' ) 

if (i <= 0 || i> = 100)

Vai funcionar.

Eu acho que sua maneira já elegante para comparar o intervalo. Mas essa abordagem faz com que você escreva testes de unidade extras para satisfazer todos os casos && .

Então, você pode usar qualquer uma das abordagens abaixo para evitar escrever testes extras de unidade.

Usando o Java 8 Streams:

 if(IntStream.rangeClosed(0,100).boxed().collect(Collectors.toList()).contains(i)) 

Usando a class Math:

 if(Math.max(0, i) == Math.min(i, 100)) 

Pessoalmente, eu recomendo a segunda abordagem porque ela não acabará criando uma matriz com o tamanho igual ao intervalo que você deseja verificar.

Experimentar:

 if (i>0 && i<100) {} 

vai funcionar pelo menos;)

Use este código:

 if (lowerBound <= val && val < upperBound) or if (lowerBound <= val && val <= upperBound) 

É assim que você verifica se um inteiro está em um intervalo. Maior que o limite inferior, menor que o limite superior. Tentar ser inteligente com a subtração provavelmente não fará o que você quer.

Se você está confiante de que os números são armazenados no formulário de complemento de 2:

 return ((x-low) <= (high-low)); 

Uma solução mais geral e mais segura seria:

 return ((x-high)*(x-low) <= 0); 

Outra maneira pretensiosa de fazer isso:

 if (IntStream.rangeClosed(1, 99).anyMatch(x -> x == i)) { // ... } 
 ValueRange range = ValueRange.of(minValue, maxValue); range.isValidIntValue(x); 

ele retorna true se minValue <= x <= MaxValue - ou seja, dentro do intervalo

ele retorna falso se x ou x> maxValue – ou seja, outofrange

abaixo das verificações do programa, se qualquer um dos valores inteiros passados ​​no método hasTeen estiver dentro do intervalo de 13 (inclusive) a 19 (Inclusivo)


 import java.time.temporal.ValueRange; public class TeenNumberChecker { public static void main(String[] args) { System.out.println(hasTeen(9, 99, 19)); System.out.println(hasTeen(23, 15, 42)); System.out.println(hasTeen(22, 23, 34)); } public static boolean hasTeen(int firstNumber, int secondNumber, int thirdNumber) { ValueRange range = ValueRange.of(13, 19); System.out.println("*********Int validation Start ***********"); System.out.println(range.isIntValue()); System.out.println(range.isValidIntValue(firstNumber)); System.out.println(range.isValidIntValue(secondNumber)); System.out.println(range.isValidIntValue(thirdNumber)); System.out.println(range.isValidValue(thirdNumber)); System.out.println("**********Int validation End**************"); if (range.isValidIntValue(firstNumber) || range.isValidIntValue(secondNumber) || range.isValidIntValue(thirdNumber)) { return true; } else return false; } } 

******SAÍDA******

verdade como 19 faz parte do intervalo

verdade como 15 faz parte do intervalo

falso como todos os três valores passaram fora do intervalo

Se você estiver usando dados do Spring, você também pode usar o object Range do Spring.

range = new org.springframework.data.domain.Range (3, 8); range.contains (5) retornará verdadeiro.

  val = val < MIN ? MIN : ( val > MAX ? MAX : val);