Pregunta

¿Hay una manera simple de hacer esto?

if (1 < x && x < 3) { .... }

Quiero algo como esto:

if (1 < x < 3) { .... }

Sé que el código anterior está mal pero ...

Gracias

¿Fue útil?

Solución

Desafortunadamente, no puedes hacer eso en Java. Sin embargo, puede crear una clase, digamos MathUtils, con un método isBetween, así:

public static boolean isBetween(int n, int begin, int end) {
  return n > begin && n < end;
}

Entonces, podría usar (suponiendo que import static):

if (isBetween(x, 1, 3)) {
  // ...
}

Pero esto solo sería útil si tiene muchas condiciones de rango .

Otros consejos

Suponiendo que estás hablando de enteros:

if ( x == 2 ) { .... }

Hay bastantes pedacitos de Java que provienen de ser un mejor C ++: en C o C ++, hay una conversión automática entre valores booleanos y enteros, así que en C ++:

int x = 5;

std::cout << std::boolalpha;

std::cout << ( 1 < x < 3 ) << std::endl;
std::cout << ( ( 1 < x ) < 3 ) << std::endl;

imprimirá " verdadero " dos veces, ya que ( 1 < x ) se evalúa como 1 y 1 es menor que 3. Java se concentra en corregir esta ambigüedad analizando dos operadores binarios haciendo que los tipos booleanos y enteros no sean convertibles, por lo que debe unirlos con otro operador; otros lenguajes no intentan arreglar C ++ pero tienen reglas de análisis más complicadas para que _ < _ < _ es un operador ternario que hace lo correcto.

No utiliza el lenguaje integrado; deberías ir con tu primera respuesta.

Varias bibliotecas le permitirán hacer algo como lo siguiente:

Range range = new ExclusiveRange(1,3);
if (range.contains(x)) { ... }

En términos de eficiencia, (1 < x && x < 3) es tan bueno como obtendrá. Para poner un número entero en un rango, debe hacer dos comparaciones.

Si desea que su código sea más legible y tiene muchos de estos rangos, puede considerar crear una clase de intervalo con una función contiene ().

Tienes la forma más simple en términos de sintaxis directa de Java. Puede introducir un método si lo desea:

public static boolean isBetween(int x, int min, int max) {
    return min < x && x < max;
}

luego llámalo con:

if (isBetween(x, 1, 3))

pero no creo que eso sea realmente más claro, y significa que hay más posibilidades de poner los argumentos en el orden incorrecto. La clase Range sugerida en otra respuesta aliviaría esa preocupación, pero al precio de agregar aún más desorden ...

La declaración de Thate usando && es lo más simple que puede obtener. Java, ni ningún otro lenguaje de estilo C que conozca, es compatible con las desigualdades encadenadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top