Em Java, é possível escrever uma instrução switch onde cada caso contém mais de um valor? Por exemplo (embora claramente o código a seguir não funcione):
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;
}
Acho que isso pode ser feito em Objective C, há algo semelhante em Java? Ou devo apenas usar declarações if
, em else if
vez disso?
java
if-statement
switch-statement
davidx1
fonte
fonte
Respostas:
Java não tem nada desse tipo. Por que não apenas fazer o seguinte?
fonte
O mais próximo que você pode chegar desse tipo de comportamento com
switch
declarações éUse
if
declarações.fonte
outra alternativa é usar a operação matemática dividindo-a, por exemplo:
Mas, como você pode ver, isso só pode ser usado quando o intervalo é fixo em cada caso.
fonte
Eu não acho que você pode fazer isso em Java. A melhor aposta é apenas colocar o código no último caso do intervalo.
fonte
fonte
Sei que este post é antigo, mas acredito que essa resposta merece algum reconhecimento. Não há necessidade de evitar a instrução switch. Isso pode ser feito em java, mas por meio da instrução switch, não nos casos. Envolve o uso de operadores ternários.
fonte
switch ((1 <= num && num <= 5 ) ? "1 .. 5" : ...
e depoiscase "1 .. 5":
.Ou você pode usar seus casos solo como pretendido e usar seu caso padrão para especificar instruções de intervalo como:
fonte
Tente fazer isso se precisar usar o switch.
fonte
Não, você não pode fazer isso. O melhor que você pode fazer é isso
fonte
É possível agrupar várias condições na mesma
case
instrução usando o mecanismo de queda permitido pelas instruções switch, é mencionado no tutorial Java e totalmente especificado na seção §14.11. A declaração switch da especificação da linguagem Java .O seguinte snippet de código foi retirado de um exemplo no tutorial, ele calcula o número de dias em cada mês (numerado do mês 1 ao mês 12):
Como você pode ver, para cobrir uma faixa de valores em uma única
case
instrução, a única alternativa é listar cada um dos valores possíveis individualmente, um após o outro. Como um exemplo adicional, veja como implementar o pseudocódigo na pergunta:fonte
Você pode usar um
enum
para representar seus intervalos,fonte
Aqui está uma maneira linda e minimalista de ir
fonte
if..elseif
alternativa usando em cascata o operador ternário (condition ? statementIfTrue : statementIfFalse
).É compatível com Java 12. Confira JEP 354 . Sem possibilidades de "alcance" aqui, mas também pode ser útil.
Você deve ser capaz de implementar isso também no Ints. Observe que sua instrução switch deve ser exaustiva (usando
default
palavras-chave ou todos os valores possíveis em instruções case).fonte
A resposta de @missingfaktor é realmente correta, mas um pouco complicada demais. O código é mais detalhado (pelo menos para intervalos contínuos) do que poderia ser, e requer sobrecargas / conversões e / ou parametrização para long, float, Integer etc.
fonte
Num
classe de tipo de Haskell se quiser entender melhor este ponto.if
s como se eu estivesse gradualmente extraindo o subfaixa inferior. Além disso, a computação redundante não é um problema de todos, mas a comparação redundante é um pouco preocupante: ele fica mais simples de fazer comparações adjacentes fora de sincronia, por exemplo, depois de algum edit:if (isBetween(x, 1, 4)) {...} else if (isBetween(x, 6, 10))
. Enfim, não é grande coisa.Real
, nãoNum
).Use uma
NavigableMap
implementação, comoTreeMap
.fonte
if (messages.floorEntry(value)!=null)
se você usar um valor inteirofloorEntry()
nunca irá retornarnull
(inserir aInteger.MIN_VALUE
chave tem o objetivo de evitar isso). Mas, independentemente do seu tipo de valor, você precisa decidir como lidar com as chaves fora do intervalo válido.Para número de entrada no intervalo 0..100
fonte
Este tipo de comportamento não é compatível com Java. No entanto, se você tiver um grande projeto que precise disso, considere combinar o código Groovy em seu projeto. O código Groovy é compilado em código de bytes e pode ser executado com JVM. A empresa para a qual trabalho usa Groovy para escrever classes de serviço e Java para escrever todo o resto.
fonte