Programação I Aula 4 (Expressões Booleanas e Expressões de Seleção) Prof. Gilberto Irajá Müller Última atualização 17/3/2009 Expressões Booleanas • O tipo primitivo boolean • É um tipo de dados primitivo em Java que possui somente dois valores: true e false • Exemplo boolean b = false; • Uma expressão booleana é aquela cujo resultado é um tipo booleano (true ou false) • Podemos distinguir duas formas principais: • as expressões relacionais e • as expressões lógicas. Expressão Relacional • Permite comparar dois valores através dos operadores relacionais, como, por exemplo, comparar os valores de duas expressões aritméticas. Exemplo: x > 5 será true se o valor da variável x for superior a 5 a + 7 == 0 será true somente se a variável a tiver valor -7 Expressão Relacional Expressão Relacional • Exercício 4.1 Sendo double x = 3.5; float y = 2; boolean vLog = true; qual o resultado de cada expressão relacional abaixo? x >= 0 _________________ x – 1.5 == y _________________ vLog __________________ y != 2 __________________ Expressão Lógica • É uma expressão que utiliza operador(es) lógico(s) e dá, também, um resultado true ou false Expressão Lógica • Exercício 4.2 Sendo double x = 3.5; float y = 2; boolean vLog = true; qual o resultado de cada expressão relacional abaixo? !vLog _______________ x – 1.5 == y && x <= 0 ________________ x – 1.5 == y || x <= 0 ________________ vLog || x >= 0 && y != 6 _________________ Instruções Condicionais • Instruções podem ser executadas ou não, dependendo de certa condição. Isso enriquece a lógica dos programas e pode ser feito com as instruções if, if-else e switch. • Também é chamada de instrução de seleção • Sintaxe do IF (observe que o primeiro não possui {}) if (condicao) comando; if (condicao) { comando; } Instruções Condicionais • Onde: condição é qualquer valor ou expressão booleana comando é qualquer instrução válida da linguagem • Os comandos somente serão executados se a expressão de condição for verdadeira • Caso o comando tenha apenas uma “linha”, então, não haverá necessidade de colocar bloco { ... } Instruções Condicionais • Exemplo com apenas um comando if (i > 0) System.out.println(i + “ é um valor positivo”); • Exemplo com mais de uma linha de comandos if (d == 5 && i <= 0) { k += 1; System.out.println(“d é 5.5 i é negativo!”); p = Math.pow(2, 3); // 2 elevado na 3 } Instruções Condicionais • Exercício 4.3 Escreva um método situacaoIMC() na classe Pessoa, onde este receberá um valor real e retornará o status de “Problema”, caso esse número seja maior que 30.0. Caso contrário, “Normal”. Instruções Condicionais • Exercício 4.4 Escreva um método aumentaSalario() para a classe Funcionário, que receberá um valor real (percentual) e um valor de bônus como parâmetros. Se o salário atual for maior que $5000.0, então, o aumento de salário não será calculado. Para salários abaixo de $1000.0, será acrescentado o bônus ao salário atual, além do acréscimo. Instruções Condicionais • Sintaxe do IF-ELSE (Observe que o primeiro não possui {}) if (condicao) ( comando1; else comando2; if (condicao) { comando1; } else { comando2; } Instruções Condicionais • Exemplo String msg = “”; if (k != 0) msg = “A variável k não é nula”; else msg = “A variável k é nula”; Instruções Condicionais • Exemplo if (numPrestacoes > 3) { juros = precoTabela * 0.1; precoFinal = precoTabela + juros; } else { precoFinal = precoTabela; } Instruções Condicionais • Exercício 4.5 Crie um método que receba dois números inteiros e retorne qual o maior número Instruções Condicionais • Exercício 4.6 Altere o método situacaoIMC() da classe Pessoa, onde este receberá um valor real e retornará o status de “Problema”, caso esse número seja maior que 30.0. Caso contrário, “Normal”. Utilize IF...ELSE Instruções Condicionais • IF...ELSE IF Exemplo if (idade < 10) faixaEtaria = “Criança”; else if (idade < 18) faixaEtaria = “Jovem”; else if (idade < 50) faixaEtaria = “Adulto”; else if (idade < 80) faixaEtaria = “Terceira idade”; else faixaEtaria = “Quarta idade”; Instruções Condicionais • Exercício 4.7 Altere o método situacaoIMC() e acrescente a seguinte informação: • • • • • • Abaixo de 18.5 (“Você está abaixo do peso ideal”) Entre 18.5 a 24.9 (“Parabéns – você está em seu peso normal”) Entre 25.0 a 29.9 (“Você está acima de seu peso sobrepeso”) Entre 30.0 a 34.9 (“Obesidade grau I”) Entre 35.0 a 39.9 (“Obesidade grau II”) A partir de 40.0 (“Obesidade grau III”) Hot Topic • Comparando objetos Exemplo: Pessoa p1 = new Pessoa(“João da Silva”, 1.80, 80.0, 30); Pessoa p2 = new Pessoa(“João da Silva”, 1.80, 80.0, 30); if (p1 == p2) System.out.println(“São iguais!”); else System.out.println(“Não são iguais!”); • RETORNARÁ FALSE, POIS SÃO OBJETOS DIFERENTES, EMBORA COM OS MESMOS ATRIBUTOS • NÃO UTILIZE == PARA VERIFICAR SE OS OBJETOS SÃO IGUAIS Hot Topic • Comparando objetos • Consulte na bibliografia o método equals, compareTo e compare • A alternativa utilizada para comparar objetos é implementar o método equals, em nosso caso, da classe Pessoa. Solicite ao professor um exemplo por e-Mail Hot Topic • Verificando se uma determinada variável não possui a referência ao objeto, ou seja, não foi instanciada Exemplo Pessoa p1; Pessoa p2 = new Pessoa(“João da Silva”, 1.80, 80.0, 30); if (p1 == null) Resposta: ________________ if (p2 == null) Resposta: ________________ Hot Topic • Comparando objetos do tipo String • O tipo String não é um tipo primitivo como os numéricos que vimos (int, double, byte, etc.). • String é uma classe Java (Java.lang.String). Quando definimos um string, criamos um objeto do tipo String, o que pode ser feito de diversas maneiras, pois a classe String possui diversos construtores sobrecarregados. Destacamos aqui duas formas usuais: • String s1 = "Blablu"; // declaração string implícita • String s2 = new String ("Blablu"); // declaração string explícita • Sendo objetos, não podemos comparar o conteúdo dos dois strings com o operador ==. A classe String possui vários métodos úteis. Um deles é o equals que permite comparar dois strings. Hot Topic Exemplo if (s1.equals(s2)).... // dará true. if (s1.equals(“blablu”)) ...// dará_______porque____________________________ • Para comparar dois strings ignorando a distinção entre maiúsculas e minúsculas, usa-se o método equalsIgnoreCase da classe String. • Exemplo • if(s1.equalsIgnoreCase(“blablu”)) ... //Agora sim, dará true. Hot Topic • Se dois strings não são iguais, um vem antes do outro no ordenamento lexicográfico (ordem do dicionário), o que pode ser descoberto com o método compareTo: string1.compareTo(string2) < 0 indica que o string1 vem antes do string2 na ordem lexicográfica. Igual a 0, significa que são exatamente iguais e, maior que 0, indica que a string1 vem depois da string2. Exemplo: if(s1.compareTo(“Bla”)<0) dará______porque ___________________________________ Hot Topic • Constantes com nome – final • Em Java, podemos dar nome a uma constante, através do modificador final • É declarada como uma variável, mas deve ser inicializada obrigatoriamente na declaração, e não poderá mudar de valor durante o programa • É convenção usar letras maiúsculas para nome de constantes • É declarada no início da classe, juntamente com os atributos Sintaxe: final tipo nome = valor; Exemplo: final double SALARIO_MINIMO = 400.0; Hot Topic Exemplo public void nivelaSalario(){ final double SALARIO_MINIMO = 350.00; if (salario < SALARIO_MINIMO) salario = SALARIO_MINIMO; } O que o método acima está fazendo? Métodos • Referências bibliográficas • http://inf.unisinos.br/~anibal • http://www.google.com.br