No algoritmo abaixo, o valor da alíquota retorna sempre 0. Qual o motivo?
Outra coisa, por que tenho que colocar o cast (float) na frente do código destacado abaixo. Se eu não colocar, não compila. A dúvida disso é que a variável alíquota já foi declarada como float. Então não entendo essa exigência. Eu tenho que fazer utilizando operador ternário “?”, “:”. Muito obrigado.
import java.util.Scanner;
public class C0610Exercicio06 {
public static void main (String[] args) {
Scanner ler = new Scanner (System.in);
float salario, aliquota;
System.out.print("Informe o salário: ");
salario = ler.nextFloat();
Você quer que a alíquota seja zero somente quando o valor for menor ou igual a 1434, não maior ou igual como está no seu código. Inverta seus operadores:
Você precisa fazer o cast no começo porque, na ausência de um especificador, um número de ponto flutuante é do tipo double, não float. Pode manter assim ou adicionar o especificador f, como abaixo:
É que você está digitando um valor maior ou igual que 1434 e sua lógica diz que se for maior ou igual a 1434 a alíquota será 0.
Quando você digita literais decimais, o Java implicitamente assume que são do tipo double. Você pode colocar o sufixo F após o literal, aí o compilador tratará o valor como float, não precisando do cast.
Exemplo: aliquota = salario >= 1434 ? 0.0F : salario >= 2150 ? 7.5F : salario >= 2886 ? 15.0F : salario >= 3582 ? 22.5F : 27.5F;
Tenha em mente que este é somente um exercício e no mundo real você não deveria escrever tantos ternários aninhados pois isso dificulta a legibilidade, ainda mais escrevendo numa única linha.
Mas mesmo assim fica algo feio de se ler.
Na prática se costuma utilizar o operador ternário somente em expressões com uma condição.
Com duas ou mais condições, fica mais legível escrever o algoritmo em um método utilizando if, dessa forma::
float getAliquota(float salario) {
if (salario >= 1434) {
return 0.0F;
}
if (salario >= 2150) {
return 7.5F;
}
if (salario >= 2886) {
return 15.0F;
}
if (salario >= 3582) {
return 22.5F;
}
return 27.5F;
}