Ajuda - Problema: chamando métodos com o Switch

10 respostas
R

Olá pessoal, sou iniciante em programação Java e estou com um problema no meu programa de uma Agenda Telefônica(Cadastro de pessoas, sendo que cada pessoa pode ter vários telefones). Ele está compilando normalmente. Porém quando executado, o menu não chama o método cadastro e consequentemente os outros também não(com exceção do sair). POO é algo novo pra mim e a idéia de criação de construtores ta meio confusa ainda. Onde está o problema no meu código? Valeu.

public class Dados {
    
	private String nome;
	private String apelido; 
	private String endereco;
	private String comentario; 	
	
	public Dados(){
		this.nome = "";
		this.apelido = "";
		this.endereco = "";
		this.comentario = "";
	}	
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getComentario() {
		return comentario;
	}
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
	
}
public class Telefone {

	private int ddi;
	private int ddd;
	private int ramal;
	private int numero;
	private String tipo;
	
	public Telefone(){
		this.ddi = 0;
		this.ddd = 0;
		this.ramal = 0;
		this.numero = 0;
		this.tipo = "";		
	}

	public int getDdi() {
		return ddi;
	}

	public void setDdi(int ddi) {
		this.ddi = ddi;
	}

	public int getDdd() {
		return ddd;
	}

	public void setDdd(int ddd) {
		this.ddd = ddd;
	}

	public int getRamal() {
		return ramal;
	}

	public void setRamal(int ramal) {
		this.ramal = ramal;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
}
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Agenda {
	
	private int opcao = 0;
	Dados pessoa = new Dados();
	Telefone tel = new Telefone();
	ArrayList<Dados> contatos = new ArrayList<Dados>();
	ArrayList<Telefone> telefones = new ArrayList<Telefone>();
	
	
public void cadastroPessoa(){	
	
	pessoa.setNome(JOptionPane.showInputDialog(null,"Nome:"));
	pessoa.setApelido(JOptionPane.showInputDialog(null,"Apelido:"));
	pessoa.setEndereco(JOptionPane.showInputDialog(null,"Endereço:"));
	pessoa.setComentario(JOptionPane.showInputDialog(null,"Comentário:"));
    while(opcao == 1){
    	tel.setDdi(Integer.parseInt(JOptionPane.showInputDialog(null,"DDI:")));
		tel.setDdd(Integer.parseInt(JOptionPane.showInputDialog(null,"DDD:")));
		tel.setRamal(Integer.parseInt(JOptionPane.showInputDialog(null,"Ramal:")));
		tel.setNumero(Integer.parseInt(JOptionPane.showInputDialog(null,"Número:")));
		tel.setTipo(JOptionPane.showInputDialog(null,"Tipo:"));
		telefones.add(tel);
		do{
			opcao = Integer.parseInt(JOptionPane.showInputDialog(null,"Cadastrar novo telefone para o contato?\n1.Sim\n2.Não"));
			}while (opcao !=1 && opcao !=2);
		}
		contatos.add(pessoa);
		cadastroTelefone();
		do{
			opcao = Integer.parseInt(JOptionPane.showInputDialog(null,"Cadastrar novo contato para a agenda?\n1.Sim\n2.Não"));
		}while (opcao !=1 && opcao !=2);		
}

public void listagem(){
	for(int i = 0; i < contatos.size();i++){
		JOptionPane.showMessageDialog(null,"Nome: "+pessoa.getNome() +"\n"
		+ "Apelido: "+pessoa.getApelido() + "\n"
		+ "Endereço: "+pessoa.getEndereco() + "\n"
		+ "Comentário: "+pessoa.getComentario());
		for(int j = 0; j < telefones.size();j++){
			JOptionPane.showMessageDialog(null,"DDI:"+tel.getDdi() +"\n"
			+ "DDD:"+tel.getDdd() + "\n"
			+ "Ramal:"+tel.getRamal() + "\n"
			+ "Número:"+tel.getNumero() + "\n"
			+ "Tipo:"+tel.getTipo());
		}
	}
}

public void pesquisa() {

	 String nome;
	 int aux = 1;

	 if (contatos.size() > 0) {
		 nome = JOptionPane.showInputDialog(null, "Digite o nome da pessoa que deseja pesquisar os dados:");
		 for(int i=0 ;i < contatos.size(); i++)
			 if(nome.equals(pessoa.getNome())) {
				 aux = 1;
				 JOptionPane.showMessageDialog(null, "Registro encontrado:\n\nNome:" + pessoa.getNome() +"\n" 
				 + "Apelido:" + pessoa.getApelido() + "\n"
				 + "Endereço:" + pessoa.getEndereco() + "\n"
				 + "Apelido:" + pessoa.getApelido());
			 }
		 	 	 if (aux == 0){
		 	 		 JOptionPane.showMessageDialog(null, "Nenhum registro foi encontrado!","Aviso",1);
		 	 	 }
	 }
}

public void exclusao(){
	
	String nome;
	int posicao = 0;
	int aux = 0;
	
	if(contatos.size()>0){
		nome = JOptionPane.showInputDialog(null,"Digite o nome da pessoa que deseja excluir");
		for(int i=0 ;i < contatos.size(); i++)
			if(nome == pessoa.getNome()) {
				aux = 1;
				posicao = i;
			}
		    if (aux == 1){
		    	int conf;
		    	conf = JOptionPane.showConfirmDialog(null,"Tem certeza que deseja excluir?");
			    if(conf == 0){
			    	contatos.remove(posicao);
			    	JOptionPane.showMessageDialog(null,"Contato excluído");
			    }else
			        JOptionPane.showMessageDialog(null,"Contato nao encontrado!");
		    }
   }
}

public void sair(){
	
    System.exit(0);
}

}
import javax.swing.JOptionPane;

public class Menu {
	
   public static void main(String[] args){	
	   
      Agenda menu = new Agenda();
	  int opcao;
	  while (true){
	     opcao = Integer.parseInt(JOptionPane.showInputDialog(null,"Menu:\n1.Cadastro\n2.Listagem contatos"
                 +"\n3.Pesquisar contatos\n4.Excluir contatos\n5.Sair"));			
		    switch (opcao){			
			case 1: menu.cadastroPessoa();
			break;
			case 2: menu.listagem();
			break;
			case 3: menu.pesquisa();
			break;
			case 4: menu.exclusao();
			break;
			case 5: menu.sair();
			break;
			default: JOptionPane.showMessageDialog(null,"Opção inválida");			
			}
	  }
   }
}

10 Respostas

therodrigoagostin

Poderia postar o erro?

R

Acho q alterei algo e agora está executando, mas ainda tenho problema no método cadastro. Ele não está dando a opção de cadastrar os telefones. O que devo alterar? Valeu.

ViniGodoy

O seu while. Vê está fazendo enquanto opcao == 1, mas opção vale 0.

R

Nossa!..nem tinha visto ViniGodoy!rsrs Valeu! Outro detalhe, a listagem não está imprimindo cada nome com seus vários telefones. Por que?

ViniGodoy

Por que você não está atribuindo o contato.get(i) a variavel pessoa.
O melhor seria usar ali um for each:

for (Dados pessoa : contatos)
R

Ok. O arrayList telefones deve estar dentro do arrayList contatos, para que eu liste os dados completos da pessoa. Só que estou com dificuldade nessa parte.

R

UP!

ViniGodoy

É só colocar um atributo do tipo Telefone (ou List<Telefone>) em sua classe Dados.

Por favor, ao upar tópicos procure complementar sua dúvida. Além disso, evite apressar tópicos em pleno domingo.

R

Ok, peço desculpas.
Poderia ser um pouco mais claro, ViniGodoy? Sou iniciante em java e POO.
Só esclarecendo o problema: devo criar uma agenda telefônica que contenha dados como nome, endereço e telefone. Sendo que neste último o usuário possa cadastrar vários números para uma mesma pessoa. Estudando, descobri que no java se usa ArrayList. Foi então que pensei em fazer o programa criando um arraylist para os contatos sendo o telefone(que deve ser vários números), um arraylist também. Ou seja, um arrayist dentro de outro. Pode ser que exista uma outra forma de pensar isso. Gostaria que quando postassem suas opiniões, se possível colocar trechos do código para que eu possa entender melhor como se implementa. O programa que fiz, não apresenta erros na compilação, mas na execução não funciona da maneira como deveria ser. As funções listagem e exclusão, por exemplo, não tem feito o que é pedido. Valeu.

ViniGodoy
Nada impede você de fazer isso aqui:
public class Pessoa { //Renomeando de dados para Pessoa para ficar mais claro
    
	private String nome  = "";
	private String apelido  = ""; 
	private String endereco  = "";
	private String comentario = ""; 	
	private List&lt;Telefone&gt; telefones = new ArrayList&lt;Telefone&gt;;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getComentario() {
		return comentario;
	}
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
	public List&lt;Telefone&gt; getTelefones() { 
            return telefones; 
        }
}

E como usa?

Pessoa pessoa = new Pessoa();
pessoa.setNome("José");
Telefone comercial = new Telefone();
comercial.setNumero("2553819");
pessoa.getTelefones().add(comercial);

E a agenda será um List<Pessoa>, como você já faz.

Criado 18 de novembro de 2012
Ultima resposta 19 de nov. de 2012
Respostas 10
Participantes 3