2012-05-18 82 views

Respuesta

12

No existe tal cosa en Java (a menos que trabaje con booleanos).

5<i da como resultado un booleano en el lado izquierdo en <10 que no le gusta al compilador.

23

No puede encadenar desigualdades. Sin embargo, puede definir un método booleano estático isInRange(value, low, high) que realizará dicha comprobación.

Algunos otros lenguajes, como Python o Icon, permiten esta notación.

+10

Quizás los parámetros se deben pedir como 'isInRange (bajo, valor, alto)' p. Ej. 'isInRange (5, i, 10)'. –

+0

De hecho, gracias :) – Gyscos

4

Me temo que las desigualdades encadenadas no están soportadas en Java en este momento. Consulte this publicación para los idiomas que sí lo hacen.

5

Puede usar una única comparación, pero es más complicado de lo que generalmente vale.

if (i - (Integer.MIN_VALUE + 6) < Integer.MIN_VALUE + (10 - 6)) 

Esto utiliza subdesbordamiento para ajustar todo el valor 5 y debajo para que sea un gran valor positivo.

La única razón por la que usaría esto es como una micro-optimización.

+3

Usted escribió '6' dos veces, probablemente algo que OP quiere evitar. –

0

un < x < b es equivalente a (xa) (xb) < 0, o si x es una expresión que sólo se quiere calcular una vez,

(x - (a + b)/2)^2 < (ba)^2/4

Mismo trato con dos igualdades no estrictas. Sin embargo, no creo que haya una forma de lidiar con una igualdad estricta y una no estricta (a menos que x sea un número entero).

1

Rango

Las comparaciones no se pueden encadenar en Java.

La forma estándar para hacer una prueba de alcance es utilizar ya sea Guava Ranges:

import com.google.common.collect.Range; 
... 
    if(Range.open(5, 10).contains(x)){ 

o Apache Commons Lang (que sólo proporciona cerrado rangos, sin embargo):

import org.apache.commons.lang3.Range; 
... 
    if(Range.between(5 + 1, 10 - 1).contains(x)){ 
Cuestiones relacionadas