Pelo que entendi do seu programa ele roda uma unica vez, se você entrar com a opção numero 1 ele apenas vai executar a opção numero 1 e depois vai parar a execução e assim as os valores das variáveis irão “resetar” quando clicar para rodar o programa novamente, por isso que quando você rodar o programa novamente e entrar com a opção 2 o valor nSal não terá o valor que você fez quando entrou no case 1.
O Usuário escolhe a opção
Na opção 1: Calcular e mostrar o novo salário usando as regras
Na opção 2: Calcular e mostrar o imposto usando as regras
Na opção 3: Mostrar na tela a classificação de acordo com o novo salário conforme tabela
Entendi oq vc quis dizer, como posso fazer pros valores não “resetarem”, terei que colocar o calculo do nSal dnv no case 3 ? O Código ficaria mto cheio nao?
Obrigatório usar estrutura “switch case”
Faça um algoritmo que receba do usuário o salário de um funcionário:
Valide a inexistência de salário menor que o salário mínimo (R$ 998,00).
Após validação apresente o menu a seguir:
Menu de opções
Calcular o novo salário
Calcular o imposto
Classificação
Sair
Digite a opção desejada:
Disciplina: Computational Thinking
Professora: Fernanda Pereira Caetano
O algoritmo deve permitir que o usuário escolha a opção desejada.
Verifique a opção de opção inválida
Na opção 1: Calcular e mostrar o novo salário usando as regras a seguir:
Salário Aumento
Menor que R$ 1.008,00 R$240.00
De R$ 1.008,00 a R$ 2.000.00 R$430.00
De R$ 2.000,01 a R$ 7.000.00 R$500.00
Acima de R$ 7.000,00 R$630.00
Na opção 2: Calcular e mostrar o imposto usando as regras a seguir:
Salário % de desconto
Até R$ 1.903,98 -
De R$ 1.903,99 até R$ 2.826,65 7,5%
De R$ 2.826,66 até 3.751,05 15%
De R$ 3.751,06 até 4.664,68 22,5%
Acima 4.664,68 27,5%
Na opção 3: Mostrar na tela a classificação de acordo com o novo salário conforme tabela a
seguir:
Salário Classificação
Até R$ 4.000,00 Analista de Programação Júnior
De R$ 4.000,01 até 7.500,99 Analista de Programação Pleno
De R$ 7.501,00 até R$ 10.000,00 Analista de Programação Senior
Acima de R$ 10.000,00 Gerente
De acordo com o enunciado que você passou, eu usaria um while para validar a entrada do salario, só iria sair do while se fosse um salario válido ou seja, que o salario informado fosse maior ou igual que 998.
Depois usaria outro while para fazer o menu ficar aparecendo para você escolher uma opção até que a opção 4 seja selecionada.
Algumas Observações
1º- O salario deveria ser uma variável do tipo float e não int pois existe salários com valores quebrados. Ex: R$ 750,99.
2º- De acordo com o enunciado acho que o valor do imposto deveria ser de acordo com o novo salario(nSal) e não com o antigo(sal),
import java.util.Scanner;
public class Ex3Extra {
public static void main(String[] args) {
int sal = 0, imp = 0, op;
float nSal = 0;
String clas;
boolean fimPrograma = false;
boolean salarioValido = false;
Scanner scn = new Scanner(System.in);
while (!salarioValido) {
System.out.println("Escreva o seu salário: ");
sal = scn.nextInt();
if (sal < 998) {
System.out.println("Seu salario esta abaixo do Salario minimo, por favor insira um salario valido!");
} else {
salarioValido = true;
}
}
while (!fimPrograma) {
System.out.println("Opção 1 Calcular o novo salario");
System.out.println("Opção 2 Calcular o imposto");
System.out.println("Opção 3 Mostra a classificação");
System.out.println("Opção 4 Sair");
System.out.println("Escolha qual opção voce deseja: ");
op = scn.nextInt();
switch (op) {
case 1:
if (sal < 1008) {
nSal = sal + 240;
System.out.println("Seu Salário será de: " + nSal);
} else if (sal > 1008 && sal < 2000) {
nSal = sal + 430;
System.out.println("Seu Salário será de: " + nSal);
} else if (sal > 2000 && sal < 7000) {
nSal = sal + 500;
System.out.println("Seu Salário será de: " + nSal);
} else if (sal > 7000) {
nSal = sal + 630;
System.out.println("Seu Salário será de: " + nSal);
}
break;
case 2:
if (sal < 1904) {
System.out.println("Voce nao tem imposto");
} else if (sal > 1904 && sal < 2826) {
imp = (sal * 75 / 100);
System.out.println("O seu imposto: " + imp);
} else if (sal > 2826 && sal < 3751) {
imp = (sal * 15 / 100);
System.out.println("O seu imposto: " + imp);
} else if (sal > 3751 && sal < 4664) {
imp = sal * 225 / 1000;
System.out.println("O seu imposto: " + imp);
} else if (sal < 4664) {
imp = sal * 275 / 1000;
System.out.println("O seu imposto: " + imp);
}
break;
case 3:
if (nSal <= 4000) {
clas = "Analista de programação Junior";
System.out.println("Classificação: " + clas);
} else if (nSal > 4000 && nSal < 7500) {
clas = "Analista de Programação Senior";
System.out.println("Classificação: " + clas);
} else if (nSal > 7500 && nSal < 10000) {
clas = "Analista de programação Senior";
System.out.println("Classificação: " + clas);
} else if (nSal > 10000) {
clas = "Gerente";
System.out.println("Classificação: " + clas);
}
break;
case 4:
System.out.println("Tchau !!");
fimPrograma = true;
}
}
}
}
Dica:
Evite implementar tudo no método main.
Na real, evite fazer métodos com mais de 20 linhas.
Procure quebrar seu problema em partes menores, independentes.
Veja:
import java.io.PrintStream;
import java.util.Scanner;
public class Exemplo {
public static void main(String[] args) {
Exemplo programa = new Exemplo();
programa.executar();
}
private static final Scanner entrada = new Scanner(System.in);
private static final PrintStream saida = System.out;
private static final int OPCAO_CALCULAR_NOVO_SALARIO = 1;
private static final int OPCAO_CALCULAR_IMPOSTO = 2;
private static final int OPCAO_MOSTRAR_CLASSIFICACAO = 3;
private static final int OPCAO_SAIR = 4;
public void executar() {
double salarioAtual = lerSalario();
double salarioNovo = salarioAtual;
while (true) {
switch (lerOpcao()) {
case OPCAO_CALCULAR_NOVO_SALARIO:
salarioNovo = calcularNovoSalario(salarioAtual);
break;
case OPCAO_CALCULAR_IMPOSTO:
calcularImposto(salarioNovo);
break;
case OPCAO_MOSTRAR_CLASSIFICACAO:
mostrarClassificacao(salarioNovo);
break;
case OPCAO_SAIR:
sair();
break;
}
}
}
private void calcularImposto(double salario) {
if (salario <= 1903.98) {
saida.println("Voce nao tem imposto");
return;
}
double imposto = 0;
if (salario >= 1903.99 && salario <= 2826.65) {
imposto = salario * 0.075;
} else if (salario >= 2826.66 && salario <= 3751.05) {
imposto = salario * 0.15;
} else if (salario >= 3751.06 && salario <= 4664.68) {
imposto = salario * 0.225;
} else if (salario > 4664.68) {
imposto = salario * 0.275;
}
saida.println("O seu imposto: " + imposto);
}
private double calcularNovoSalario(double salarioAtual) {
double salarioNovo = 0;
if (salarioAtual < 1008) {
salarioNovo = salarioAtual + 240;
} else if (salarioAtual > 1008 && salarioAtual < 2000) {
salarioNovo = salarioAtual + 430;
} else if (salarioAtual > 2000 && salarioAtual < 7000) {
salarioNovo = salarioAtual + 500;
} else if (salarioAtual > 7000) {
salarioNovo = salarioAtual + 630;
}
saida.println("Seu Salário será de: " + salarioNovo);
return salarioNovo;
}
private int lerOpcao() {
while (true) {
saida.println("Opção " + OPCAO_CALCULAR_NOVO_SALARIO + " Calcular o novo salario");
saida.println("Opção " + OPCAO_CALCULAR_IMPOSTO + " Calcular o imposto");
saida.println("Opção " + OPCAO_MOSTRAR_CLASSIFICACAO + " Mostra a classificação");
saida.println("Opção " + OPCAO_SAIR + " Sair");
saida.print("Escolha qual opção voce deseja: ");
int opcao = Integer.parseInt(entrada.nextLine());
switch (opcao) {
case OPCAO_CALCULAR_NOVO_SALARIO:
case OPCAO_CALCULAR_IMPOSTO:
case OPCAO_MOSTRAR_CLASSIFICACAO:
case OPCAO_SAIR:
return opcao;
default:
saida.println("Opcao inválida: " + opcao);
break;
}
}
}
private double lerSalario() {
while (true) {
saida.print("Escreva o seu salário: ");
double salario = Double.parseDouble(entrada.nextLine());
if (salario < 998) {
saida.println("Seu salario esta abaixo do Salario minimo, por favor insira um salario valido!");
} else {
return salario;
}
}
}
private void mostrarClassificacao(double salarioNovo) {
String classificacao = "";
if (salarioNovo <= 4000) {
classificacao = "Analista de programação Junior";
} else if (salarioNovo > 4000 && salarioNovo < 7500) {
classificacao = "Analista de Programação Senior";
} else if (salarioNovo > 7500 && salarioNovo < 10000) {
classificacao = "Analista de programação Senior";
} else if (salarioNovo > 10000) {
classificacao = "Gerente";
}
saida.println("Classificação: " + classificacao);
}
private void sair() {
saida.println("Tchau !!");
System.exit(0);
}
}