Problema com menu utilizando switch case

Estou com um problema ao chamar o menu do switch case. Ao chamar a opção 3 do switch case do método menuCliente que se encontra na classe ServicoCliente, ele simplesmente deleta os dados. Sei que o problema está no método do menuCliente, só não sei como posso solucionar isso. Alguém pode me ajudar a resolver ?

Classe Cliente Serviço

public class ClienteServico {
	
	RepositorioCliente clienteRepositorio = new RepositorioCliente();
	
	public Cliente cadastrarCliente(Cliente cliente) throws Exception {
		if (cliente.getNome().length() < 4) {
			throw new Exception("Insira um nome com no minímo 5 caracteres");
		} else if (cliente.getCpf().length() < 11 || cliente.getCpf().length() > 11) {
			throw new Exception("CPF inválido. Insira um CPF com 11 caracteres");
		} else {
			System.out.println("Cliente cadastrado com sucesso!");
			return this.clienteRepositorio.adicionarCliente(cliente);
		}
	}
	
	public void listarClientes() {
		if (clienteRepositorio.getRepositorioCliente().isEmpty()) {
			System.out.println("Repositório vazio");
		} else {
			this.clienteRepositorio.listarClientes();
		}
	}
	
	public void alterarCliente(Cliente cliente, int codigo) throws Exception {
		if (codigo <= 0) {
			throw new Exception("Código inválido!");
		}
		
		if (cliente.getCpf().length() < 11 || cliente.getCpf().length() > 11) {
			throw new Exception("CPF incorreto. Informe um CPF com 11 caracteres");
		}
		
		if (!cliente.getEmail().contains("@")) {
			throw new Exception("E-mail se encontra no padrão incorreto.");
		}
		
		if (!cliente.getSexo().equalsIgnoreCase("feminino") && !cliente.getSexo().equalsIgnoreCase("masculino")) {
			throw new Exception("Sexo incorreto.");
		} else {
			this.clienteRepositorio.alterarCliente(cliente, codigo);
		}
	}
	
	public void buscarClientePorCodigo(int codigo) throws Exception {
		if (codigo <= 0) {
			throw new Exception("Código inválido.");
		} else {
			System.out.println(this.clienteRepositorio.buscarClientePorCodigo(codigo));
		}
	}
	
	public void menuCliente() throws Exception {
		Scanner entrada = new Scanner(System.in);
		
		System.out.println("[1] - Cadastrar Cliente");
		System.out.println("[2] - Listar Clientes");
		System.out.println("[3] - Voltar para o menu principal");
		
		int novaOpcao = entrada.nextInt();
		
		switch (novaOpcao) {
			case 1:
				Cliente novoCliente = new Cliente();
				
				System.out.println("Código: ");
				novoCliente.setCodigoCliente(entrada.nextInt());
				
				System.out.println("Nome: ");
				novoCliente.setNome(entrada.next());
				
				System.out.println("Idade: ");
				novoCliente.setIdade(entrada.nextInt());
				
				System.out.println("Sexo: ");
				novoCliente.setSexo(entrada.next());
				
				System.out.println("CPF: ");
				novoCliente.setCpf(entrada.next());
				
				System.out.println("E-mail: ");
				novoCliente.setEmail(entrada.next());
				
				System.out.println("Senha: ");
				novoCliente.setSenha(entrada.nextInt());
				
				cadastrarCliente(novoCliente);
				break;
			
			case 2:
				listarClientes();
				break;
			
			case 3:
				menu();
				break;
		}
	}
}

Menu

public class Menu {
	
	public static int menu() throws Exception {
		ClienteServico servicoCliente = new ClienteServico();
		Scanner entrada = new Scanner(System.in);
		System.out.println(" [1] - Menu do Cliente");
		int opcao = entrada.nextInt();
		int resp;
		
		do {
			switch (opcao) {
				case 1:
					servicoCliente.menuCliente();
					break;
			}
			
			System.out.println("Digite 0 para voltar ao menu: ");
			resp = entrada.nextInt();
		} while (resp == 0);
		
		return opcao;
	}
	
	public static void main(String[] args) throws Exception {
		menu();
	}
}

No switch que vc postou, soh tem a opção 1.

Quando eu seleciono a opção 1 no método main ele chama o serviço de cliente e lá tem um método chamado menuCliente(). Observe na classe de Cliente Serviço. Se efetuar um cadastro e em seguida vc selecionar a opção 3 ele irá deletar o cadastro. Sei que o problema está nessa opção 3 do switch, só não sei outra forma de resolver isso.

public void menuCliente() throws Exception {
Scanner entrada = new Scanner(System.in);
System.out.println("[1] - Cadastrar Cliente");
System.out.println("[2] - Listar Clientes");
System.out.println("[3] - Voltar para o menu principal");
int novaOpcao = entrada.nextInt();

switch (novaOpcao) {
    case 1:
        Cliente novoCliente = new Cliente();

        System.out.println("Código: ");
        novoCliente.setCodigoCliente(entrada.nextInt());
        System.out.println("Nome: ");
        novoCliente.setNome(entrada.next());
        System.out.println("Idade: ");
        novoCliente.setIdade(entrada.nextInt());
        System.out.println("Sexo: ");
        novoCliente.setSexo(entrada.next());
        System.out.println("CPF: ");
        novoCliente.setCpf(entrada.next());
        System.out.println("E-mail: ");
        novoCliente.setEmail(entrada.next());
        System.out.println("Senha: ");
        novoCliente.setSenha(entrada.nextInt());

        cadastrarCliente(novoCliente);
        break;

    case 2:
        listarClientes();
        break;
        
    case 3:
         menu();
        break;
        
 
}

Toda vez que você chama o menu(), uma nova instância de ClienteServico é criada e a anterior é perdida (onde você cadastrou o cliente).
Mude essa variável para ser um campo da classe.

1 curtida

Ah, e é sempre bom botar um default no Switch