Ao executar a classe principal SpringDataApplication.java
e acessar a opção 2 - Funcionario e tentarmos sair das opções de Funcionário ao digitarmos 0 (zero) alteramos a variável private Boolean system
para false
, porém ao voltarmos no menu principal não é possível entrar na opção** 2 - Funcionario**, pois o estado da variável continua sendo false
e o valor true
somente é atribuído na declaração da variável.
Uma opção seria alterar a declaração da variável como private Boolean system;
e dentro do método inicial public void inicial(Scanner scanner)
atribuirmos o valor para true
(system = true;
). Assim garantimos que todas as vezes que acessarmos a opção 2 - Funcionario e alterarmos o estado para false
, garantimos que possamos visualizar as opções de funcionário e não entrarmos num loop do menu principal.
Obs: Esse mesmo bug ocorre em todas as classes de service
Classe com bug:
@Service
public class CrudFuncionarioService {
private Boolean system = true; //bug
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
private final CargoRepository cargoRepository;
private final FuncionarioRepository funcionarioRepository;
private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;
public CrudFuncionarioService(FuncionarioRepository funcionarioRepository,
CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
this.cargoRepository = cargoRepository;
this.funcionarioRepository = funcionarioRepository;
this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
}
public void inicial(Scanner scanner) {
while(system) {
System.out.println("Qual acao de funcionario deseja executar");
System.out.println("0 - Sair");
System.out.println("1 - Salvar");
System.out.println("2 - Atualizar");
System.out.println("3 - Visualizar");
System.out.println("4 - Deletar");
int action = scanner.nextInt();
switch (action) {
case 1:
salvar(scanner);
break;
case 2:
atualizar(scanner);
break;
case 3:
visualizar(scanner);
break;
case 4:
deletar(scanner);
break;
default:
system = false;
break;
}
}
}
//métodos
}
Classe corrigida:
@Service
public class CrudFuncionarioService {
private Boolean system; //correção do bug
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
private final CargoRepository cargoRepository;
private final FuncionarioRepository funcionarioRepository;
private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;
public CrudFuncionarioService(FuncionarioRepository funcionarioRepository,
CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
this.cargoRepository = cargoRepository;
this.funcionarioRepository = funcionarioRepository;
this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
}
public void inicial(Scanner scanner) {
system = true; //correção do bug
while(system) {
System.out.println("Qual acao de funcionario deseja executar");
System.out.println("0 - Sair");
System.out.println("1 - Salvar");
System.out.println("2 - Atualizar");
System.out.println("3 - Visualizar");
System.out.println("4 - Deletar");
int action = scanner.nextInt();
switch (action) {
case 1:
salvar(scanner);
break;
case 2:
atualizar(scanner);
break;
case 3:
visualizar(scanner);
break;
case 4:
deletar(scanner);
break;
default:
system = false;
break;
}
}
}
//métodos
}