Não sei como colocar o limite de 400 de desconto e também não estou entendendo como devo utilizar estruturas condicionadas. Devo criar sub-rotinas? Como faria isso?
Um fator importante é que o calculo da divisão precisa ter número com virgula, então precisa utilizar double (não sei em java mas, em C# usamos decimal porque é mais o mais preciso)
H
hugokotsubo
Não precisa repetir os valores em mais de um if, pode ser apenas:
if(s<=2000){System.out.println("SalarioLiquido:" + s);} else if (s <= 4000) { System.out.println("SalarioLiquido:" + (s - porcento(s, 2)));} else { System.out.println("SalarioLiquido:"+(s-porcento(s,4)));}
Afinal, se não entrou no primeiro if, então com certeza é maior que 2000, e por isso não precisa testar isso de novo (outra forma de pensar é que se não for maior que 2000, ele entra no primeiro if, o que também torna desnecessário testar isso novamente no segundo if).
E se não entrou no primeiro e nem no segundo if, é porque com certeza é maior que 4000, e por isso não precisa testar de novo. E como não há mais casos a se testar, nem precisa de outro if (pois se chegou no último else, então com certeza é maior que 4000, não precisando testar isso de novo).
Ainda tem outra vantagem, que é quando uma das faixas muda. Por exemplo, se a primeira mudar de 2000 pra 2500, no código acima só precisa mudar em um lugar (no caso de exercícios talvez não seja tão relevante, já que os requisitos não mudam com o tempo, como acontece com projetos reais, mas enfim).
Por fim, vale lembrar que o código aceita valores negativos. Como é um exercício, talvez não seja relevante, mas se for o caso, bastaria ter mais uma condição no início:
if(s<=0){System.out.println("Saláriodevesermaiorquezero");}elseif(s<=2000){System.out.println("SalarioLiquido:" + s);} else if (s <= 4000) { System.out.println("SalarioLiquido:" + (s - porcento(s, 2)));} else { System.out.println("SalarioLiquido:"+(s-porcento(s,4)));}
D
Dragoon
O mais engraçado é que você deu a resposta em cima da minha, porque não criou uma resposta com suas interpretações na pergunta original
Obs: Eu sei tudo o que você falou, mas, o usuário precisa entender a didática do exercicio, porque o mesmo inverteu os operadores de comparação do código dele.
H
hugokotsubo
Respondi no seu código porque minha intenção era justamente comentar sobre ele. Sobre os erros do código original vc já tinha falado, e achei desnecessário repetir.
Dito isso, eu não tenho como adivinhar o que vc sabe ou não. Eu só posso falar sobre o que foi postado (no caso, o código), pois são as informações que eu tenho disponíveis…
De qualquer forma, peço desculpas se pareceu um ataque pessoal. Não tive intenção de ofender, somente de comentar de maneira puramente técnica sobre o código.
Não sou professor, não sei a forma mais didática de explicar, então eu prefiro mostrar de uma vez a forma que considero mais adequada. É isso…