Começar uma rotina de novo

15 respostas
claudneto

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"...

public static void main (String[] args) {
		Scanner input = new Scanner(System.in);
		Cadastro cad = new Cadastro();
		
		System.out.println("O que você deseja fazer:");
		System.out.println("1 - Cadastrar, 2 - Buscar, 3 - Alterar, 4 - Relatório de Cadastros, 0 - Sair?");
		int escolha1 = input.nextInt();
		
		
		switch (escolha1) {
		case 1: {
			System.out.println("Digite o nome:");
			String nome = input.nextLine();
			System.out.println("Digite o telefone:");
			String telefone = input.nextLine();
			cad.cadastraCliente(nome, telefone);
			break;}
		case 2: {
			System.out.println("Digite o nome:");
			String nome = 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;}
		
		case 3: {
			System.out.println("Digite o nome a ser alterado:");
			String nome = input.nextLine();
			
			if (cad.buscaCliente(nome) == -1) {
				System.out.println("Cadastro não encontrado!");
			}
			else {
				System.out.println("Digite o novo nome:");
				String nome1 = input.nextLine();
				clientes.get(cad.buscaCliente(nome)).setNome(nome1);
				
				System.out.println("Digite o novo telefone:");
				String telefone1 = 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;}
		
		case 4: {
			cad.relatorioDeCadastros();
			break;}
		
		case 0: {
			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...

15 Respostas

ViniGodoy

Antes da linha 5, coloque um

while (true) {

E feche esse while antes da linha 64.

abelgomes

faça um menu mais ou menos assim:

package guj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Menu {
	static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
	static int opcao = 0;
	public static void main(String...args) throws NumberFormatException, IOException{
		
		menu();
		do{
			switch(opcao){
			case 1:System.out.println(1);
				break;
			case 2:System.out.println(2);
				break;
			case 0:System.exit(0);
				break;
			default: System.out.println("Opcao invalida");
				break;
				
			}
			menu();
		}while (opcao!=0);
	}
	
	public static void menu() throws NumberFormatException, IOException{
		System.out.println("1 - Imprime 1 ");
		System.out.println("2 - Imprime 2 ");
		System.out.print("Escolha uma opçcao: ");
		opcao = Integer.parseInt(entrada.readLine());
	}

}
NataliaOliveira

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); }

Agora deu um erro aqui…

<blockquote>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:13)

at classes.Cadastro.main(Cadastro.java:69)</blockquote>
Marky.Vasconcelos

Mostre o código que inicializa a ArrayList.

NataliaOliveira

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)
package classes;

import java.util.ArrayList;
import java.util.Scanner;

public class Cadastro {
	
	//Cadastra cliente
	/**
	 * @param nome
	 * @param telefone
	 */
	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);
	}
	
	//Busca cadastro
	/**
	 * @param nome
	 */
	public int buscaCliente(ArrayList<Cliente> clientes, String nome) {
		int i = 0;
		while (!clientes.get(i).getNome().equals(nome)) {
			i++;
		}
		
		if (clientes.get(i).getNome().equals(nome)) {
			return i;
		}
		else {
			return -1;
		}
	}
	
	//Altera cadastro
	/**
	 * @param nome
	 * @param telefone
	 */
	public void alterarCliente (ArrayList<Cliente> clientes, String nome, int telefone) {
				
		clientes.get(buscaCliente(clientes, nome)).setNome(nome);
		clientes.get(buscaCliente(clientes, nome)).setTelefone(telefone);
	}
	
	//Imprime relatório de todos os cadastros
	public void relatorioDeCadastros (ArrayList<Cliente> clientes) {
		for (int i = 0; i < clientes.size(); i++) {
			System.out.println(clientes.get(i).getNome() + " - " + clientes.get(i).getTelefone());
		}
	}
	
	//Main
	/**
	 * @param args
	 */
	public static void main (String[] args) {
		ArrayList<Cliente> clientes = new ArrayList<Cliente>();
		Scanner input = new Scanner(System.in);
		Cadastro cad = new Cadastro();
		
		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?");
			int escolha1 = input.nextInt();
		
		
			switch (escolha1) {
			case 1: {
				System.out.println("Digite o telefone:");
				long telefone = input.nextInt();
				System.out.println("Digite o nome:");
				String nome = input.nextLine();
				cad.cadastraCliente(clientes, nome, telefone);
				break;}
			case 2: {
				System.out.println("Digite o nome:");
				String nome = 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;}
		
			case 3: {
				System.out.println("Digite o nome a ser alterado:");
				String nome = input.nextLine();
			
				if (cad.buscaCliente(clientes, nome) == -1) {
					System.out.println("Cadastro não encontrado!");
				}
				else {
					System.out.println("Digite o novo nome:");
					String nome1 = input.nextLine();
					clientes.get(cad.buscaCliente(clientes, nome)).setNome(nome1);
				
					System.out.println("Digite o novo telefone:");
					int telefone1 = 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;}
		
			case 4: {
				cad.relatorioDeCadastros(clientes);
				break;}
		
			case 0: {
				System.exit(0);
				break;}
			default: {
				System.out.println("Opção inválida!");
				break;}
			}
		}
	}	
}

O código inteiro...

package classes;

public class Cliente {
	
	private String nome;
	private long telefone;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public long getTelefone() {
		return telefone;
	}
	public void setTelefone(long telefone) {
		this.telefone = telefone;
	}
}

Classe Cliente...

Me ajudem, por favor!

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:
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++;  
         }  
         
         //Crie um novo objeto cliente e sete as propriedades.
         Cliente cliente = new Cliente();
         cliente.setNome(nome);  
         cliente.setTelefone(telefone);  

         //Adiciona o objeto na lista
         clientes.add(cliente);
}
claudneto

Ahhhhhhhhhh ééééé…

Pra alterar qual é?

Marky.Vasconcelos

Voce vai precisar enviar o nome anterior também para achar o objeto original

public void alterarCliente (ArrayList<Cliente> clientes, String nomeOrg, String nome, int telefone) {   
        int clienteIndex = buscaCliente(clientes,nomeOrg);
        clientes.get(clienteIndex).setNome(nome);   
        clientes.get(clienteIndex).setTelefone(telefone);   
    }

E no case3 do main:

case 3: {   
                System.out.println("Digite o nome a ser alterado:");   
                String nome = input.nextLine();   
               
                if (cad.buscaCliente(clientes, nome) == -1) {   
                    System.out.println("Cadastro não encontrado!");   
                }   
                else {   
                    System.out.println("Digite o novo nome:");   
                    String nome1 = input.nextLine();         
                    System.out.println("Digite o novo telefone:");   
                    int telefone1 = 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:

clientes.set(i, cliente);
claudneto

Ok…

Vlw pela ajuda gente!

Criado 10 de outubro de 2008
Ultima resposta 10 de out. de 2008
Respostas 15
Participantes 5