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?
segue meu código até o momento:
import java.util.Scanner;
public class Main {
public static void main (String args[]) {
int s, d;
Scanner ler = new Scanner(System.in);
System.out.println("Salario Bruto:");
s = ler.nextInt();
if (s <= 2000) {
System.out.println("Salario Liquido:" + (s - (s*0/100)));
}else if (s >= 2000){
System.out.println("Salario Liquido:" + (s - (s*2/100)));
}else if (s >= 4000){
System.out.println("Salario Liquido:" + (s - (s*4/100)));
}
}
}
O seu if ainda falta algumas regras e o cálculo você faz separado e se ultrapassar 400 você manda só 400, não é nada complicado, exemplo:
public static double porcento(int s, double p) {
double desc = p / 100;
desc = desc * s;
if (desc > 400) {
return 400;
}
return desc;
}
public static void main(String[] args) {
int s = 0;
Scanner ler = new Scanner(System.in);
System.out.println("Salario Bruto: ");
s = ler.nextInt();
if (s <= 2000) {
System.out.println("Salario Liquido: " + s);
} else if (s > 2000 && s <= 4000){
System.out.println("Salario Liquido: " + (s - porcento(s, 2)));
} else if (s > 4000){
System.out.println("Salario Liquido: " + (s - porcento(s, 4)));
}
}
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)
Não precisa repetir os valores em mais de um if, pode ser apenas:
if (s <= 2000) {
System.out.println("Salario Liquido: " + s);
} else if (s <= 4000) {
System.out.println("Salario Liquido: " + (s - porcento(s, 2)));
} else {
System.out.println("Salario Liquido: " + (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ário deve ser maior que zero");
} else if (s <= 2000) {
System.out.println("Salario Liquido: " + s);
} else if (s <= 4000) {
System.out.println("Salario Liquido: " + (s - porcento(s, 2)));
} else {
System.out.println("Salario Liquido: " + (s - porcento(s, 4)));
}
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.
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…