Olá pessoal, eu estou tentando fazer um código em Java que faça exatamente isso:
Crie um programa que gerencie os clientes de uma empresa. O programa deverá conter o menu de opções:
? Adicionar Cliente (nome, e-mail, endereço)
? Remover Cliente
? Pesquisar Cliente
? Imprimir quantidade de clientes
? Listar todos os clientes
? Sair
Pois bem, eu consegui fazer isso:
// CLASSE PRINCIPALimportjava.util.Scanner;importjava.util.ArrayList;importjavax.swing.JOptionPane;publicclassPrincipal{publicstaticvoidmain(String[]args){intfim=0;do{ArrayList<Cliente>dados=newArrayList<Cliente>();Stringmenu;intescolha;Scannerscan=newScanner(System.in);menu=JOptionPane.showInputDialog("MENU\n\n"+"1 - Adicionar cliente\n"+"2 - Remover cliente\n"+"3 - Pesuisar cliente\n"+"4 - Imprimir quantidade de clientes\n"+"5 - Listar todos os clientes\n"+"0 - Sair\n");escolha=Integer.parseInt(menu);if(escolha==1){//Adicionar cliente.}elseif(escolha==2){//Remover cliente.}elseif(escolha==3){//Pesquisar cliente.}elseif(escolha==4){//Imprimir quantidade de clientes.}elseif(escolha==5){//Pesquisar clientes.}elseif(escolha==0){fim=1;}else{System.out.println("Opção inválida!");}}while(fim!=1);}}//CLASSE CLIENTEpublicclassCliente{privateStringnome;privateStringemail;privateStringendereco;publicCliente(Stringnome,Stringemail,Stringendereco){this.nome=nome;this.email=email;this.endereco=endereco;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}//------------------------------------publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}//------------------------------------publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){this.endereco=endereco;}
Eu não consigo fazer com que as informações do cliente sejam armazendas no ArrayList, e pesquisando na internet achei meio confuso e não entendi direito como fazer. Agradeço a quem puder me explicar melhor e até me dar alguma sugestão pra melhorar o código.
Você precisa utilizar métodos da classe ArrayList. Aqui abaixo uns links bem esclarecedores do assunto:
G
GuilhermeRamalho
Obrigado pela ajuda Reginildo, baseado no que eu entendi, certamente entendi algo errado, eu tentei implementar a adição de cliente no código, mas algo saiu errado. Agradeço se alguém puder me ajudar a corrigir.
importjava.util.Scanner;importjava.util.ArrayList;importjavax.swing.JOptionPane;publicclassPrincipal{publicstaticvoidmain(String[]args){intfim=0;ArrayList<Cliente>dados=newArrayList<Cliente>();//Aqui eu criei o ArrayList dados.Clientechamada;//Aqui eu fiz a chamada dos métodos da classe cliente.do{Stringmenu;intescolha;menu=JOptionPane.showInputDialog("MENU\n\n"+"1 - Adicionar cliente\n"+"2 - Remover cliente\n"+"3 - Pesuisar cliente\n"+"4 - Imprimir quantidade de clientes\n"+"5 - Listar todos os clientes\n"+"0 - Sair\n");escolha=Integer.parseInt(menu);if(escolha==1){Stringentrada=JOptionPane.showInputDialog("Digite o nome do usuário.");chamada.setNome(entrada);//Pelo que entendi aqui eu deveria passar a String//Que vai ser incluida no Nome.dados.add(Cliente);//Aqui eu tentei adicionar o Nome no ArrayList cliente//Porém recebo o erro "Cliente cannot be resolved".//O que estou fazendo de errado?}elseif(escolha==2){//Remover cliente.}elseif(escolha==3){//Pesquisar cliente.}elseif(escolha==4){//Imprimir quantidade de clientes.}elseif(escolha==5){//Pesquisar clientes.}elseif(escolha==0){fim=1;}else{System.out.println("Opção inválida!");}}while(fim!=1);}}
filipi
Seu erro acontece porque no ArrayList deve passar como parâmetro seu objeto chamada, e não o tipo dele no caso, Cliente.
Ficaria:
dados.add(chamada)
E utilize um switch/case ao invés de fazer vários else if para a escolha… Dê uma olhada neste link para ver como aplicar.
valeu.
G
GuilhermeRamalho
filipi:
Seu erro acontece porque no ArrayList deve passar como parâmetro seu objeto chamada, e não o tipo dele no caso, Cliente.
Ficaria:
filipi, obrigado por responder. Então, eu fiz as alterações que você falou e ainda assim estou recebendo um erro dizendo que a variável chamada não foi inicializada, segue o código:
importjava.util.ArrayList;importjavax.swing.JOptionPane;publicclassPrincipal{publicstaticvoidmain(String[]args){intfim=0;ArrayList<Cliente>dados=newArrayList<Cliente>();Clientechamada;do{Stringmenu;intescolha;menu=JOptionPane.showInputDialog("MENU\n\n"+"1 - Adicionar cliente\n"+"2 - Remover cliente\n"+"3 - Pesuisar cliente\n"+"4 - Imprimir quantidade de clientes\n"+"5 - Listar todos os clientes\n"+"0 - Sair\n");escolha=Integer.parseInt(menu);switch(escolha){case1:Stringentrada;entrada=JOptionPane.showInputDialog("Digite o nome do cliente:");chamada.setNome(entrada);//The local variable chamada may not have been initializedentrada=JOptionPane.showInputDialog("Digite o email do cliente:");chamada.setEmail(entrada);//The local variable chamada may not have been initializedentrada=JOptionPane.showInputDialog("Digite o endereço do cliente:");chamada.setEndereco(entrada);//The local variable chamada may not have been initializeddados.add(chamada);//The local variable chamada may not have been initialized// Teste JOptionPane.showMessageDialog(null, dados);break;case2://Remover clientebreak;case3://Pesquisar clientebreak;case4://Listar clientesbreak;case0:fim=1;}}while(fim!=1);}}
G
gejava
Clientechamada;
tente:
Cliente chamada = null; se fizer isso você deve instanciar o Cliente posteriormente antes de usa-lo ou você tera NullPointerException
ou
Clientechamada=newCliente();
acho que é mais ou menos isso:
G
GuilhermeRamalho
[quote=gejava]Cliente chamada;
tente:
Cliente chamada = null; se fizer isso você deve instanciar o Cliente posteriormente antes de usa-lo ou você tera NullPointerException
ou
Clientechamada=newCliente();
acho que é mais ou menos isso:
Eu já tentei fazer Cliente chamada = new Cliente();Porém eu recebo o erro “The constructor Cliente() is undefined.”
G
gejava
cara, talvez você esteja começando errado.
tente ler o link, altere seu código e diga se funciona.
S
schiefler
Amigo, você ja tentou inicializar a String entrada?
Além disso, você deve iniciar um cliente novo para cada vez que você for executar o programa por conta do do…while, caso contrário, ele adiciona sempre o mesmo cliente na lista.
Tente fazer seu código ficar mais limpo e claro, não existe em usar uma variável para cada entrada, fica mais fácil de trabalhar e caso outra pessoa leia seu código, ela vai entender o que você quiz dizer.
Tente fazer seu código assim:
do{Clientecliente=newCliente();//...switch(escolha){case1:Stringnome=JOptionPane.showInputDialog("Digite o nome do usuário.");Stringemail=JOptionPane.showInputDialog("Digite o email do cliente:");Stringendereco=JOptionPane.showInputDialog("Digite o endereço do cliente:");cliente.setNome(nome);cliente.setEmail(email);cliente.setEndereco(endereco);dados.add(cliente);break;//...}}
Espero poder ter lhe ajudado.
filipi
GuilhermeRamalho, perceba que seu erro mudou. Como esse próprio erro diz, a Classe Cliente não possui método construtor, método que deve existir ao instanciar um objeto da classe.
Ao invés de usar Cliente chamada
Faça
Clientechamada=newCliente();
E na classe cliente crie um método construtor
publicCliente(){}
Isso resolverá seu problema. Depois de uma lida em algum material sobre esse método, para entender mais sobre o que se trata