Olá galera tudo bem ? então sou iniciante com java e programação em si,
estou tendo 2 problemas:
Eu estou desenvolvendo um cadastro de Cliente então eu criei minha entidade Cliente
package br.com.zup.model;
public class Cliente {
private String nome;
private int idade;
private Long cpf;
private String email;
private int telefone;
private String endereco;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public Long getCpf() {
return cpf;
}
public void setCpf(Long cpf) {
this.cpf = cpf;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getTelefone() {
return telefone;
}
public void setTelefone(int telefone) {
this.telefone = telefone;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
}
e minha classe principal
package br.com.zup.cadastro;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import br.com.zup.model.Cliente;
public class Main {
private static final int DIGITO_MAX_SUBMENU = 2;
private static final int DIGITO_MIN_SUBMENU = 0;
private static final String MSG_DE_INSTRUCAO_DO_MENU = "Olá seja bem vindo ao seu sistema de cadastro de clientes!"
+ " \nDigite :\n 1-[para inserir cadastro]\n 2-[para alterar cadastro]\n 3-[para buscar cadastro ]\n 4-[para deletar cadastro]\n 0-[para ENCERRAR]";
private static final String INSTRUCOES_SUBMENU = "Digite:\n1-[para buscar por um cliente]\n2-[Para buscar a lista de clientes]\n0-[para SAIR]";
private static final String DIGITE_O_CPF_PARA_DELETE = "Digite o cpf do cliente para excluir o cadastro :";
private static final String DIGITE_O_CPF_PARA_ALTERAR_CADASTRO = "Digite o cpf do cliente para alterar o cadastro :";
private static final String DIGITE_O_ENDERECO = "Digite o endereço :";
private static final String DIGITE_O_TELEFONE = "Digite o telefone :";
private static final String DIGITE_EMAIL = "Digite email :";
private static final String DIGITE_O_CPF = "Digite o cpf :";
private static final String DIGITE_A_IDADE = "Digite a idade :";
private static final String DIGITE_O_NOME = "Digite o nome :";
private static final String DIGITE_UMA_OPERACAO_VALIDA = "\nDigite uma operação válida\n";
private static final String TELEFONE = "Número de telefone: ";
private static final String ENDERECO = "Endereço físico: ";
private static final String E_MAIL = "Endereço de e-mail: ";
private static final String CPF = "CPF: ";
private static final String IDADE = "Idade: ";
private static final String NOME = "Nome do cliente: ";
private static final int DIGITO_MAX = 4;
private static final int DIGITO_MIN = 0;
private static Map<Long, Cliente> listaClientes;
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
listaClientes = new HashMap<Long, Cliente>();
int operacao;
do {
System.out.println(MSG_DE_INSTRUCAO_DO_MENU);
operacao = teclado.nextInt();
if (operacao < DIGITO_MIN || operacao > DIGITO_MAX) {
System.out.println(DIGITE_UMA_OPERACAO_VALIDA);
}
switch (operacao) {
case 1:
adicionaCliente(teclado);
break;
case 2:
alteraCadastro(teclado);
break;
case 3:
subMenuDeBusca(teclado);
break;
case 4:
excluirCadastro(teclado);
break;
default:
break;
}
} while (operacao != 0);
}
public static void adicionaCliente(Scanner teclado) {
Cliente clienteAdicionado = new Cliente();
System.out.printf(DIGITE_O_NOME);
clienteAdicionado.setNome(teclado.next());
System.out.printf(DIGITE_A_IDADE);
clienteAdicionado.setIdade(teclado.nextInt());
System.out.printf(DIGITE_O_CPF);
clienteAdicionado.setCpf(teclado.nextLong());
System.out.printf(DIGITE_EMAIL);
clienteAdicionado.setEmail(teclado.next());
System.out.printf(DIGITE_O_TELEFONE);
clienteAdicionado.setTelefone(teclado.nextInt());
System.out.printf(DIGITE_O_ENDERECO);
clienteAdicionado.setEndereco(teclado.next());
teclado.nextLine();
listaClientes.put(clienteAdicionado.getCpf(), clienteAdicionado);
}
public static void buscaCliente(Scanner teclado) {
System.out.println(DIGITE_O_CPF);
Long cpf = teclado.nextLong();
Cliente cliente = listaClientes.get(cpf);
clienteBuscado(cliente);
}
public static void buscaListaDeClientes() {
for (Cliente cliente : listaClientes.values()) {
clienteBuscado(cliente);
}
}
public static void alteraCadastro(Scanner teclado) {
System.out.println(DIGITE_O_CPF_PARA_ALTERAR_CADASTRO);
Long cpf = teclado.nextLong();
Cliente clienteAlterado = listaClientes.get(cpf);
System.out.printf(DIGITE_O_NOME);
clienteAlterado.setNome(teclado.next());
System.out.printf(DIGITE_A_IDADE);
clienteAlterado.setIdade(teclado.nextInt());
System.out.printf(DIGITE_EMAIL);
clienteAlterado.setEmail(teclado.next());
System.out.printf(DIGITE_O_TELEFONE);
clienteAlterado.setTelefone(teclado.nextInt());
System.out.printf(DIGITE_O_ENDERECO);
clienteAlterado.setEndereco(teclado.next());
listaClientes.put(cpf, clienteAlterado);
clienteBuscado(clienteAlterado);
}
public static void excluirCadastro(Scanner teclado) {
System.out.println(DIGITE_O_CPF_PARA_DELETE);
Long cpf = teclado.nextLong();
listaClientes.remove(cpf);
}
public static void clienteBuscado(Cliente clienteBuscado) {
System.out.println(NOME + clienteBuscado.getNome());
System.out.println(IDADE + clienteBuscado.getIdade());
System.out.println(CPF + clienteBuscado.getCpf());
System.out.println(E_MAIL + clienteBuscado.getEmail());
System.out.println(ENDERECO + clienteBuscado.getEndereco());
System.out.println(TELEFONE + clienteBuscado.getTelefone());
}
public static void subMenuDeBusca(Scanner teclado) {
int operacao;
do {
System.out.println(INSTRUCOES_SUBMENU);
operacao = teclado.nextInt();
if (operacao < DIGITO_MIN_SUBMENU || operacao > DIGITO_MAX_SUBMENU) {
System.out.println(DIGITE_UMA_OPERACAO_VALIDA);
}
switch (operacao) {
case 1:
buscaCliente(teclado);
case 2:
buscaListaDeClientes();
}
} while (operacao != 0);
}
}
Quando eu rodo no console e começo a fazer a inserção do meu cliente acontece o seguinte:
1- quando eu coloco o endereço com espaço se eu usar só o teclado.next(); ele estoura uma Exception in thread “main” java.util.InputMismatchException;
Se eu colocar ;
clienteAdicionado.setEndereco(teclado.next());
teclado.nextLine() ele não da Excption porém ele só grava a primeira parava antes do espaço por exemplo : “Barra Funda”
ele só grava em endereço “Barra”
2- o outro problema é que quando eu faço minha “busca” por 1 cadastro eu busco pelo cpf ele duplica o o valor.
trazendo 2x o cadastro.
Obrigado galera!