Não sei se é essa descrição que é a correta sobre rotina...
Mas eu fiz um cadastro bem besta de nomes e telefones em ArrayList...mas no método main eu não sei como fazer pra após cadastrar, ele voltar no "menu"...
publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);Cadastrocad=newCadastro();System.out.println("O que você deseja fazer:");System.out.println("1 - Cadastrar, 2 - Buscar, 3 - Alterar, 4 - Relatório de Cadastros, 0 - Sair?");intescolha1=input.nextInt();switch(escolha1){case1:{System.out.println("Digite o nome:");Stringnome=input.nextLine();System.out.println("Digite o telefone:");Stringtelefone=input.nextLine();cad.cadastraCliente(nome,telefone);break;}case2:{System.out.println("Digite o nome:");Stringnome=input.nextLine();if(cad.buscaCliente(nome)==-1){System.out.println("Cadastro não encontrado!");}else{System.out.println(clientes.get(cad.buscaCliente(nome)).getNome());System.out.println(clientes.get(cad.buscaCliente(nome)).getTelefone());}break;}case3:{System.out.println("Digite o nome a ser alterado:");Stringnome=input.nextLine();if(cad.buscaCliente(nome)==-1){System.out.println("Cadastro não encontrado!");}else{System.out.println("Digite o novo nome:");Stringnome1=input.nextLine();clientes.get(cad.buscaCliente(nome)).setNome(nome1);System.out.println("Digite o novo telefone:");Stringtelefone1=input.nextLine();clientes.get(cad.buscaCliente(nome)).setTelefone(telefone1);System.out.println("Cadastro alterado para:");System.out.println(clientes.get(cad.buscaCliente(nome)).getNome());System.out.println(clientes.get(cad.buscaCliente(nome)).getTelefone());}break;}case4:{cad.relatorioDeCadastros();break;}case0:{System.exit(0);break;}default:{System.out.println("Opção inválida!");break;}}}
Esse é meu método main...eu preciso que após cadastrar (por exemplo) ele "volte" para a 5ª linha...perguntando o que deseja fazer...
É um programinha bem besta mas me deu essa dúvida...
Não deveria ser um do while?
Ai ele executaria uma primeira vez e caso quisesse sair, digitaria o número equivalente na opção do menu.
abelgomes
foi oque eu coloquei gata…
claudneto
public void cadastraCliente(String nome, long telefone) {
int i = 0;
while (clientes.get(i).getNome().equals(null) || clientes.get(i).getTelefone() == 0) {
i++;
}
clientes.get(i).setNome(nome);
clientes.get(i).setTelefone(telefone);
}
O erro diz que você está tentando acessar uma posição fora do array.
Me parece que ele não foi instanciado.
claudneto
Fiz uma gambiarra mas consegui
public void cadastraCliente(ArrayList<Cliente> clientes, String nome, long telefone) {
int i = 0;
while (clientes.get(i).getNome().equals(null) || clientes.get(i).getTelefone() == 0) {
i++;
}
clientes.get(i).setNome(nome);
clientes.get(i).setTelefone(telefone);
}
Coloquei o “ArrayList<Cliente> clientes” como parâmetro…dai na hora de chamar o método eu coloquei:
“cad.cadastraCliente(clientes, nome, telefone);”
e instanciei o ArrayList<Cliente> clientes no início do main!
Vlw galera…
NataliaOliveira
Posta o código aí.
claudneto
Agora deu outro erro!
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at classes.Cadastro.cadastraCliente(Cadastro.java:15)
at classes.Cadastro.main(Cadastro.java:79)
packageclasses;importjava.util.ArrayList;importjava.util.Scanner;publicclassCadastro{//Cadastra cliente/** * @param nome * @param telefone */publicvoidcadastraCliente(ArrayList<Cliente>clientes,Stringnome,longtelefone){inti=0;while(clientes.get(i).getNome().equals(null)||clientes.get(i).getTelefone()==0){i++;}clientes.get(i).setNome(nome);clientes.get(i).setTelefone(telefone);}//Busca cadastro/** * @param nome */publicintbuscaCliente(ArrayList<Cliente>clientes,Stringnome){inti=0;while(!clientes.get(i).getNome().equals(nome)){i++;}if(clientes.get(i).getNome().equals(nome)){returni;}else{return-1;}}//Altera cadastro/** * @param nome * @param telefone */publicvoidalterarCliente(ArrayList<Cliente>clientes,Stringnome,inttelefone){clientes.get(buscaCliente(clientes,nome)).setNome(nome);clientes.get(buscaCliente(clientes,nome)).setTelefone(telefone);}//Imprime relatório de todos os cadastrospublicvoidrelatorioDeCadastros(ArrayList<Cliente>clientes){for(inti=0;i<clientes.size();i++){System.out.println(clientes.get(i).getNome()+" - "+clientes.get(i).getTelefone());}}//Main/** * @param args */publicstaticvoidmain(String[]args){ArrayList<Cliente>clientes=newArrayList<Cliente>();Scannerinput=newScanner(System.in);Cadastrocad=newCadastro();while(true){System.out.println("O que você deseja fazer:");System.out.println("1 - Cadastrar, 2 - Buscar, 3 - Alterar, 4 - Relatório de Cadastros, 0 - Sair?");intescolha1=input.nextInt();switch(escolha1){case1:{System.out.println("Digite o telefone:");longtelefone=input.nextInt();System.out.println("Digite o nome:");Stringnome=input.nextLine();cad.cadastraCliente(clientes,nome,telefone);break;}case2:{System.out.println("Digite o nome:");Stringnome=input.nextLine();if(cad.buscaCliente(clientes,nome)==-1){System.out.println("Cadastro não encontrado!");}else{System.out.println(clientes.get(cad.buscaCliente(clientes,nome)).getNome());System.out.println(clientes.get(cad.buscaCliente(clientes,nome)).getTelefone());}break;}case3:{System.out.println("Digite o nome a ser alterado:");Stringnome=input.nextLine();if(cad.buscaCliente(clientes,nome)==-1){System.out.println("Cadastro não encontrado!");}else{System.out.println("Digite o novo nome:");Stringnome1=input.nextLine();clientes.get(cad.buscaCliente(clientes,nome)).setNome(nome1);System.out.println("Digite o novo telefone:");inttelefone1=input.nextInt();clientes.get(cad.buscaCliente(clientes,nome)).setTelefone(telefone1);System.out.println("Cadastro alterado para:");System.out.println(clientes.get(cad.buscaCliente(clientes,nome)).getNome());System.out.println(clientes.get(cad.buscaCliente(clientes,nome)).getTelefone());}break;}case4:{cad.relatorioDeCadastros(clientes);break;}case0:{System.exit(0);break;}default:{System.out.println("Opção inválida!");break;}}}}}
Não é trabalho de escola, nem faculdade...é só por diversão mesmo!
NataliaOliveira
O seu arraylist está vazio, então quando você tenta acessar alguma posição do array, ele dispara a exceção.
Você tem que inserir o objeto no seu arraylist, na hora do cadastro.
Faça algo assim:
publicvoidcadastraCliente(ArrayList<Cliente>clientes,Stringnome,longtelefone){inti=0;while(clientes.get(i).getNome().equals(null)||clientes.get(i).getTelefone()==0){i++;}//Crie um novo objeto cliente e sete as propriedades.Clientecliente=newCliente();cliente.setNome(nome);cliente.setTelefone(telefone);//Adiciona o objeto na listaclientes.add(cliente);}
claudneto
Ahhhhhhhhhh ééééé…
Pra alterar qual é?
Marky.Vasconcelos
Voce vai precisar enviar o nome anterior também para achar o objeto original
case3:{System.out.println("Digite o nome a ser alterado:");Stringnome=input.nextLine();if(cad.buscaCliente(clientes,nome)==-1){System.out.println("Cadastro não encontrado!");}else{System.out.println("Digite o novo nome:");Stringnome1=input.nextLine();System.out.println("Digite o novo telefone:");inttelefone1=input.nextInt();alterarCliente(clientes,nome,nome1,telefone1);System.out.println("Cadastro alterado para:");System.out.println(clientes.get(cad.buscaCliente(clientes,nome1)).getNome());System.out.println(clientes.get(cad.buscaCliente(clientes,nome1)).getTelefone());}break;}
NataliaOliveira
Pra alterar você precisa saber qual é a posição do item que você quer alterar.
Aí fica assim, onde i é a posição e cliente é o objeto alterado: