Expressões Condicionais
Para escrever programas úteis, quase sempre precisamos verificar condições e alterar o comportamento do programa de acordo. As declarações condicionais nos dão essa capacidade.
Expressão Condicional If-Else
A forma mais simples é a declaração if-else:
Exemplo:
Escreva o seguinte código no arquivo /home/labex/project/ifelseTest.java:
public class ifelseTest{
public static void main(String[] args){
int x = 1;
if (x > 0) {
System.out.println("x is positive");
}
else{
System.out.println("x is non-positive");
}
}
}
Saída:
Execute o arquivo ifelseTest.java usando os seguintes comandos no terminal:
javac /home/labex/project/ifelseTest.java
java ifelseTest
Veja a saída:
x is positive
A expressão entre parênteses é chamada de condição. Se for verdadeira, as declarações entre chaves após if são executadas. Se a condição não for verdadeira, as declarações entre chaves após else são executadas. Se nenhum else estiver pendente para visitar e a condição if for falsa, as declarações, se houver, após o if-else são executadas. A condição pode conter qualquer um dos operadores de comparação, também chamados de operadores relacionais:
Exemplo:
if (x == y){ } // x equals y
if (x != y){ } // x is not equal to y
if (x > y) { } // x is greater than y
if (x < y) { } // x is less than y
if (x >= y){ } // x is greater than or equal to y
if (x <= y){ } // x is less than or equal to y
Embora essas operações provavelmente sejam familiares a você, a sintaxe que o Java usa é um pouco diferente dos símbolos matemáticos como =, ≠ e ≤. Um erro comum é usar um único sinal de igual (=) em vez de um sinal de igual duplo (==). Lembre-se de que = é o operador de atribuição e == é um operador de comparação. Além disso, não existe =< ou =>.
Os dois lados de um operador condicional precisam ser do mesmo tipo. Você só pode comparar ints com ints e doubles com doubles. Os operadores == e != funcionam com Strings, mas não fazem o que você espera. E os outros operadores relacionais não operam em strings.
Um exemplo: Se o resto quando x é dividido por 2 é 0, então sabemos que x é par e este código imprime uma mensagem com esse efeito. Se a condição for falsa, a segunda instrução de impressão é executada. Como a condição deve ser verdadeira ou falsa, exatamente uma das alternativas será executada. Se você acha que pode querer verificar a paridade (par ou ímpar) dos números com frequência, pode querer "envolver" este código em um método, da seguinte forma:
Exemplo:
Escreva o seguinte código no arquivo /home/labex/project/conditionTest.java:
public class conditionTest
{
public static void printParity(int x) {
if (x%2 == 0) {
System.out.println(x + " is even");
} else {
System.out.println(x + " is odd");
}
}
public static void main(String[] args){
printParity(17);
printParity(18);
}
}
Saída:
Execute o arquivo conditionTest.java usando os seguintes comandos no terminal:
javac /home/labex/project/conditionTest.java
java conditionTest
Veja a saída:
17 is odd
18 is even
Agora você tem um método chamado printParity que imprimirá uma mensagem apropriada para qualquer inteiro que você quiser fornecer. Em main, você invocaria este método. Lembre-se sempre de que, ao invocar um método, você não precisa declarar os tipos dos argumentos que fornece. Java pode descobrir quais são os tipos. Você deve resistir à tentação de escrever coisas como: printParity(int 3). Além disso, você também pode aninhar uma condicional dentro de outra.
Exemplo:
Escreva o seguinte código no arquivo /home/labex/project/nestedConditionTest.java:
public class nestedConditionTest{
public static void main(String[] args){
int x = 0; // you can try x = 1, x = -1
if (x == 0) {
System.out.println("x is zero");
}
else {
if (x > 0) {
System.out.println("x is positive");
}
else {
System.out.println("x is negative");
}
}
}
}
Saída:
Execute o arquivo nestedConditionTest.java usando os seguintes comandos no terminal:
javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest
Veja a saída:
x is zero
Agora há uma condicional externa que contém dois ramos. O primeiro ramo contém uma simples instrução de impressão, mas o segundo ramo contém outra instrução condicional que tem dois ramos próprios. Ambos os ramos são instruções de impressão, mas poderiam ter sido instruções condicionais também.
A indentação ajuda a tornar a estrutura bonita e compreensível, mas, no entanto, as condicionais aninhadas ficam difíceis de ler muito rapidamente. Evite-as quando puder. Por outro lado, esse tipo de estrutura aninhada é comum, e a veremos novamente. Então, é melhor você se acostumar com isso.
Expressão Condicional Switch-Case
A declaração switch-case é outra expressão condicional. A sintaxe da declaração switch-case é assim:
Exemplo:
// value type can be byte, short, int, char, String, but long type is not correct.
switch (variable or an value expression)
{
// case value must be a constant value
case value1:
// code
;
case value2:
// code
;
default:
// code
;
}
Exemplo:
Escreva o seguinte código no arquivo /home/labex/project/switchTest.java:
public class switchTest
{
public static void main(String[] args){
// you can change i = 2, then try again
int i = 2;
switch(i)
{
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
// if no break expression, sometimes you'll get a confusing answer.
// you can try deleting the break expression and see what happens.
break;
// if none of the above matches, execute the default statements
default:
System.out.println("default");
break;
}
}
}
Saída:
Execute o arquivo switchTest.java usando os seguintes comandos no terminal:
javac /home/labex/project/switchTest.java
java switchTest
Veja a saída:
2