En Java, ¿es posible escribir una declaración de cambio donde cada caso contenga más de un valor? Por ejemplo (aunque claramente el siguiente código no funcionará):
switch (num) {
case 1 .. 5:
System.out.println("testing case 1 to 5");
break;
case 6 .. 10:
System.out.println("testing case 6 to 10");
break;
}
Creo que esto se puede hacer en Objective C, ¿hay algo similar en Java? ¿O debería usar declaraciones if
, en su else if
lugar?
java
if-statement
switch-statement
davidx1
fuente
fuente
if/else
sea una mejor solución.Respuestas:
Java no tiene nada de eso. ¿Por qué no hacer lo siguiente?
fuente
Lo más cerca que puede llegar a ese tipo de comportamiento con
switch
declaraciones esUtilice
if
declaraciones.fuente
otra alternativa es usar la operación matemática dividiéndola, por ejemplo:
Pero, como puede ver, esto solo se puede usar cuando el rango es fijo en cada caso.
fuente
No creo que puedas hacer eso en Java. Lo mejor es poner el código en el último caso del rango.
fuente
fuente
Sé que esta publicación es antigua, pero creo que esta respuesta merece un reconocimiento. No es necesario evitar la declaración de cambio. Esto se puede hacer en Java, pero a través de la instrucción switch, no los casos. Implica el uso de operadores ternarios.
fuente
switch ((1 <= num && num <= 5 ) ? "1 .. 5" : ...
y luegocase "1 .. 5":
.O puede usar sus casos individuales según lo previsto y usar su caso predeterminado para especificar instrucciones de rango como:
fuente
Intente esto si debe usar el interruptor.
fuente
No, no puedes hacer eso. Lo mejor que puedes hacer es eso
fuente
Aquí hay una manera hermosa y minimalista de hacerlo.
fuente
if..elseif
alternativa que usa en cascada el operador ternario (condition ? statementIfTrue : statementIfFalse
).Es posible agrupar varias condiciones en la misma
case
declaración utilizando el mecanismo de caída permitido por las declaraciones de cambio, se menciona en el tutorial de Java y se especifica completamente en la sección §14.11. La declaración de cambio de la especificación del lenguaje Java .El siguiente fragmento de código se tomó de un ejemplo del tutorial, calcula el número de días de cada mes (numerados desde el mes 1 hasta el mes 12):
Como puede ver, para cubrir un rango de valores en una sola
case
declaración, la única alternativa es enumerar cada uno de los valores posibles individualmente, uno tras otro. Como ejemplo adicional, aquí se explica cómo implementar el pseudocódigo en la pregunta:fuente
Puede utilizar un
enum
para representar sus rangos,fuente
Es compatible a partir de Java 12. Consulte JEP 354 . Aquí no hay posibilidades de "rango", pero tampoco puede ser útil.
También debería poder implementar eso en ints. Tenga en cuenta que su declaración de cambio debe ser exhaustiva (usando
default
palabras clave o usando todos los valores posibles en declaraciones de casos).fuente
La respuesta de @missingfaktor es correcta pero un poco complicada. El código es más detallado (al menos para intervalos continuos) de lo que podría ser, y requiere sobrecargas / conversiones y / o parametrización para long, float, Integer, etc.
fuente
Num
clase de tipos de Haskell si desea comprender mejor este punto.if
s como si estuviera derramando gradualmente un subrango inferior. Además, un cálculo redundante no es un problema en absoluto, pero la comparación redundante es un poco preocupante: se vuelve más fácil de hacer comparaciones adyacentes fuera de sincronización, por ejemplo, después de algún edición:if (isBetween(x, 1, 4)) {...} else if (isBetween(x, 6, 10))
. De todos modos, no es gran cosa.Real
, noNum
).Utilice una
NavigableMap
implementación, comoTreeMap
.fuente
if (messages.floorEntry(value)!=null)
si hay un valor nulo si usa un valor enterofloorEntry()
nunca regresaránull
(insertar laInteger.MIN_VALUE
clave tiene la intención de evitarlo). Pero, independientemente de su tipo de valor, debe decidir cómo manejar las claves fuera del rango válido.Para el número de entrada en el rango 0..100
fuente
Este tipo de comportamiento no es compatible con Java. Sin embargo, si tiene un proyecto grande que necesita esto, considere mezclar código Groovy en su proyecto. El código Groovy se compila en código de bytes y se puede ejecutar con JVM. La empresa para la que trabajo usa Groovy para escribir clases de servicio y Java para escribir todo lo demás.
fuente