Criar vetor de objetos Agenda?

Olá, Bom Dia, o professor do curso passou um trabalho, to vendo Java agora, tenho consultado apostilas e videos mas estou com bastante dificuldades. Por enquanto, estamos sem tutor virtual. Peço ajuda dos colegas do fórum para desenvolver o raciocínio dessa questão.

A questão pede o seguinte:

É para implementar uma agenda telefônica usando vetor de objetos. Cada contato da agenda deve ser representado como uma classe, a qual conterá informações como nome, telefone, endereço e relação (nome de empresa ou nome de pessoa física que se refere este contato, uma espécie de lembrete. Mas a agenda será implementada como uma outra classe, que conterá o vetor de objetos (contatos). Essa agenda também tem que ser limitada a 1000 contatos. (Como sugestão, pode ser criado um campo último, o qual guarda a última posição inserida no vetor e evita que este seja percorrido por completo em cada operação). Deve ser criada uma terceira classe, chamada Principal, a qual utilizará as classes criadas anteriormente.
…Depois um método busca na agenda, o qual recebe um nome, ou parte deste, e retorna o contato. Se houver mais de um contato, a busca precisa retornar apenas o primeiro.

Esse é só o início da questão, tem mais coisa… mas gostaria de uma ajudar para partir daqui e eu pensando fiz o seguinte raciocínio:

class Contatos {
  private ArrayList<String, Integer, String, String> pessoasContato = new ArrayList[1000]<String, Integer, String, String>();
}

Nem sei se posso criar com essa estrutura… porque não vi nenhum exemplo de ArrayList com a limitação de objetos e os parâmetros do lado, dessa forma que montei.

Então, o grande problemas dos iniciantes de desenvolvimento que não há um estudo prévio do que realmente precisam fazer.

Ele fala que cada item da sua lista representará um classe que conterá dois campos nome e número de telefone:

Implementação:

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

Depois disso ela fala que precisa de um vetor que é limitado a 1000 agenda.

//Vetor de agenda
Agenda[] agenda = new Agenda[1000];
    
//Criando 3 instâncias de agenda
Agenda ag1 = new Agenda("primeiro nome", "(11)1111-1111");
Agenda ag2 = new Agenda("segundo nome", "(22)2222-2222");
Agenda ag3 = new Agenda("terceiro nome", "(33)3333-3333");
    
//Carregando o vetor com 3 agendas
agenda[0] = ag1;
agenda[1] = ag2;
agenda[2] = ag3;

Busca de agenda:

Integer i = 0;
Agenda agResposta = null;
while(i < 1000 && agenda[i] != null)
{
	if (agenda[i].getNome().contains("nome"))
	{
		agResposta = agenda[i];
		break;
	}
	i++;
}


if (agResposta == null)
{
	System.out.println("Não foi encontrado");
}
else {
	System.out.println("Foi encontrado:" 
         + agResposta.getNome() + " "
         + agResposta.getTelefone());
}

Isso é o programa a grosso modo, melhore, estude e refaça até entender! A idéia é que você refatore tudo isso e talvez até coloque num ArrayList

2 curtidas

Obrigado @Dragoon por sua ajuda!!! valeu! :slight_smile:
Eu tentei, antes, resumir o enunciado para não ficar tão grande. Mas agora editei e tentei deixar ele mais completo.

Eu pensei em criar uma classe Contato e depois um construtor para esta classe. Parecido com o que você fez. Depois criaremos uma Classe Agenda, que vai conter o vetor de objeto de Contatos, mas não sei se escrevi o código certo.

Classe Contato

public class Contato {
  private String nome;
  private String telefone;
  private String endereco;
  private String lembrete;

  public Contato(){ 
  }
  
  public Contato(String nome, String telefone, String endereco, String lembrete) {
    this.nome = nome;
    this.telefone = telefone;
    this.endereco = endereco;
    this.lembrete = lembrete;  
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome){
    this.nome = nome;
  }

  public String getTelefone() {
    return telefone;
  }

  public String setTelefone(String telefone) {
    this.telefone = telefone;
  
  public String getEndereco() {
    return endereco;
  }
 
  public String setEndereco(String endedereco) {
    this.endereco = endereco;
  }

  public String getLembrete() {
    return lembrete;
  }

  public String setLembrete(String lembrete) {
    this.lembrete = lembrete;
  }

Classe Agenda

public class Agenda {
  private ArrayList<Contato> listaAgenda;
  public Agenda(){
    this.listaAgenda = new ArrayList<Contato>();
    this.listaAgenda.add(new Contato());

Continue, me parece correta!

Olá Dragoon e leitores, segue mais um pouco do desenvilvimento:
Minha dúvida agora, é na parte de criar as instâncias na classe Principal, o eclipse não apresentou erro na classe Agenda e nem na classe Contato. Mas na Principal que quero criar as instâncias do ArrayList, para testá-lo para depois criarmos métodos remover, inserir e listar contatos. Valeu Dragoon, obrigado mesmo pela atenção!

Segue o código:

// Classe Contato:

public class Contato {
	public String nome;
	public String telefone;
	public String endereco;
	public String relacao;
	
	public String getNome() {
		return this.nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getTelefone() {
		return this.telefone;
	}
	
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	public String getEndereco() {
		return this.endereco;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public String getRelacao() {
		return this.relacao;
	}
	
	public void setRelacao(String relacao) {
		this.relacao = relacao;
	}
	
	public Contato() {
		
	}
	
	public Contato(String nome, String telefone, String endereco, String relacao) {
		this.nome = nome;
		this.telefone = telefone;
		this.endereco = endereco;
		this.relacao = relacao;  
	}
		
}

//Classe Agenda

import java.util.ArrayList;

public class Agenda {
	  private ArrayList<Contato> listaAgenda;
	  public Agenda(){
	    this.listaAgenda = new ArrayList<Contato>();
	    this.listaAgenda.add(new Contato());
      }
}

// Classe Principal

import java.util.ArrayList;

public class Principal {

public … agora não sei como fica a estrutura do código nesse ponto para criar instância… Sacas??? rsrs

// Aqui estou com dúvida de como criar as instâncias das classes que contém outra classe no formato ArrayList. To utilizando o Eclipse no Linux.

E depois para chamar os métodos inserção, alteração e remoção dos contatos da agenda.

public void insere(..dúvida aqui..)
	list.add(0, Fulano, 99999999, Rua A);
	list.add(1, Ciclano, 88888888, Rua B);
	list.add(2, Beltrano, 88889999, Rua C);
	
	
	list.add(0, Beltrano, 77777777, Rua D);
	

public..
//Remover contato Ciclano
public void remove(…..)

public..	
list.remove("Ciclano");
	
//Listar conteúdo da agenda

Estou tentando fazer esta questão tbm. Mas estacionei em:

package listaAgenda;
import java.util.Scanner;
import java.util.ArrayList;


class Contato {
        public String nome;
	public String telefone;
	public String endereco;
	public String relacao;
	
        
	public String getNome() {
		return this.nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getTelefone() {
		return this.telefone;
	}
	
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	public String getEndereco() {
		return this.endereco;
	}
	
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public String getRelacao() {
		return this.relacao;
	}
	
	public void setRelacao(String relacao) {
		this.relacao = relacao;
	}
	
	public Contato() {
		
	}
	
	public Contato(String nome, String telefone, String endereco, String relacao) {
		this.nome = nome;
		this.telefone = telefone;
		this.endereco = endereco;
		this.relacao = relacao;  
	}

        @Override
        public String toString(){
        return nome;
        }
}
		
class Agenda {
          
          final int MAX_CONTATOS=1000; //MAX DE CONTATOS QUE A AGENDA VAI TER
          int codigo,prox_contato,ind_array;
	  Contato[] contatos;
	  
          Agenda(){
                      
          prox_contato=1;
          contatos = new Contato[MAX_CONTATOS];
          ind_array=0;           
	    
      }
          public void adiciona(Contato contato) {
            for (int i = 0; i < ind_array; i++) {
             if (contatos[i] == null) {
               contatos[i] = contato;
                break;
      }
}  
}            
         Contato buscaContato (String nome) {
           for(int i = 0; i < ind_array; i++) 
           if(contatos[i].nome == nome)
               return contatos[i];
           return null;
      }

         }

Alguem pode me ajudar?

Olá Elaine, também estou nesse combate… Meu vetor estou implementando como ArrayList. Mas você sabe mais especificamente onde precisa de ajuda no seu código?

eu também tinha posto um arraylist, mas pela video aula, eles fizeram conforme eu coloquei agora, pois temos q definir (Como sugestão, pode ser criado um campo último, o qual guarda a última
posição inserida no vetor e evita que este seja percorrido por completo em cada
operação)…e não consegui colocar isso de outra forma usando o araylist.
Meu problema eh colocar o inserir, remover…vi em alguns videos que oá dando ideal seria colocar na class Agenda…mas está dando mil erros na hora de compilar

public void  incluirContato(Contato contato){
      contatos.add(contato);
}

comecei a fazer o incluir e já deu erro…

Entendi. É… eles pedem um vetor de objetos… Também cheguei a pensar sobre essa questão da limitação a 1000 contatos e o ArrayList…

Mas o meu método Inserir está parecido com o seu, só que o meu chama o nome do meu ArrayList.

não consegui ver onde está o problema do seu.

esse buscar agenda do Dragon, vc incluiu em algum lugar??

Como estava fazendo em ArrayList, nem tem essa forma de busca nele. Talvez tutoria possa ajudar…

Se não me engano… array simples não possui método add… apenas Collections possui o método “add”. No caso ArrayList é um Collections.

O que está acontecendo que essa Agenda de vetor não está pronta ???

1 curtida

Olá Dragoon, boa tarde!

Eu acho que consegui criar as classes e os métodos da classe agenda para inserir e remover contato… agora estou com dificuldade de criar o método de “busca na agenda”, o qual recebe um nome ou parte do nome e retorna o contato e também o método alterar contato. Lemrbando que fiz a classe Agenda como uma ArrayList.

Primeiro a classe Contato… aquela acima com os parâmetros de nome, endereço, telefone e lembrete.

Minha classe Agenda:

import java.util.ArrayList;

public class Agenda {
	//Atributos
	private ArrayList<Contato> agenda;
	

	//Construtores
	public Agenda(){
		}
	
	public Agenda(ArrayList<Contato> agenda) {
		this.agenda = agenda;
	}
	

	//Métodos	
	public ArrayList<Contato> getAgenda() {
		return agenda;
	}
	

	public void setAgenda(ArrayList<Contato> agenda) {
		this.agenda = agenda;
	}


	public void inserirContato(Contato contato) {
		agenda.add(contato);
	}


	public void remove(Contato contato) { 
		agenda.remove(contato);
	}
	

	public String toString() {
		return agenda.toString();
	}


}

E agora a classe Principal, que serve para rodar os testes…

import java.util.ArrayList;

public class Principal {
	public static void main(String[] args) {
		Agenda agenda1 = new Agenda();
		ArrayList<Contato> listaDaAgenda = new ArrayList<Contato>();
				
		Contato contato0 = new Contato("Fulano", "Rua A", "99999999", "Trabalho");
		
		listaDaAgenda.add(contato0);
		
		agenda1.inserirContato(contato0);
		
		
		System.out.println(agenda1);	
	}	

}

Estava rodando os métodos inserir e remover antes de eu mexer mais um pouco e parar de rodar… kkk

Obrigadão pela ajuda! :smiley:
Abraço

1 curtida

Classe Agenda:

package code;
import java.util.ArrayList;
import java.util.List;
public class Agenda {
    
    private List<Contato> contatos;

    public Agenda(List<Contato> contatos) {
        this.contatos = contatos;
    }
    
    public Agenda() {
        contatos = new ArrayList<>();
    }
    
    public List<Contato> getContatos() {
        return contatos;
    }

    public boolean add(Contato contato)
    {
        return contatos.add(contato);
    }
    
    public boolean edit(Contato contato)
    {
        Contato contatoEdit = buscaPorCodigo(contato.getCodigo());
        if (contatoEdit != null)
        {
            contatoEdit.setNome(contato.getNome());
            return true;
        }
        return false;
    }
    
    public boolean remover(Contato contato)
    {
        return contatos.remove(contato);
    }
    
    public Contato buscaPorCodigo(int codigo)
    {
        Contato result = null;
        int i = 0;
        while (i < contatos.size() && result == null)
        {
            if (codigo == contatos.get(i).getCodigo())
            {
                result = contatos.get(i);
            }
            i++;
        }
        return result;
    }
    
    public List<Contato> buscaPorNome(String nome)
    {
        List<Contato> result = null;
        int i = 0;
        while (i < contatos.size())
        {
            if (contatos.get(i).getNome().contains(nome))
            {
                if (result == null) result = new ArrayList<>();
                result.add(contatos.get(i));
            }
            i++;
        }
        return result;
    }
}

Classe Contato:

package code;
public class Contato {
    private int codigo;
    private String nome;

    public Contato(int codigo, String nome) {
        this.codigo = codigo;
        this.nome = nome;
    }
    public Contato() {
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

Como utilizar:

Agenda agenda = new Agenda();
        
//criando duas classes contato
Contato contato1 = new Contato(1, "Guj 1");
Contato contato2 = new Contato(2, "Guj 2");

//adicionando
agenda.add(contato1);
agenda.add(contato2);

//busca por id
Contato contato3 = agenda.buscaPorCodigo(1);

//busca por nome
List<Contato> contatos = agenda.buscaPorNome("Gu");

//alterar
contato3.setNome("Guj 2 - alterar");
agenda.edit(contato3);

System.out.println();
2 curtidas

Obrigado mais uma vez pela gentileza caríssimo Dragoon,

vou estudar o que me ensinou para tentar aprender e praticar no código.

Que Deus o abençoe muito! Um Abraço :smiley: :smiley: :smiley:

1 curtida

A minha classe agenda, fiz com array assim:

    class agenda {
              int prox_agenda = 1;
              final int MAX_CONTATOS=1000; //MAX DE CONTATOS QUE A AGENDA VAI TER
              int codigo,prox_contato,ind_array;
    	  String nome;  
              Contato[] contatos;
    	  
              agenda(String n){
              nome=n;
              codigo=prox_agenda++;            
              prox_contato=1;
              contatos = new Contato[MAX_CONTATOS];
              ind_array=0;           
    	    
              }
            
             int getCoda(){return codigo;}
             String GetNomeA(){return nome;

fiz estes métodos:

    Contato CriaContato(String nome,String endereco, String telefone, String lembrete){
    Contato C;
    if (prox_contato == MAX_CONTATOS)
    C=null;
    else{
    C= new Contato();
    contatos[ind_array++]=C;
    }
    return C;
    
}
				 
        
    Contato buscaContato (String nome) {
       for(int i = 0; i < ind_array; i++) 
       if(contatos[i].nome == nome)
       return contatos[i];
       return null;
  }



   }

 
Pra listar é só dar o ..........ptrln né?

}

Como adiciono mais contatos na classe Principal, pois está dando erro qdo incluo o segundo.

 public class Principal {
   public  static void main(String[] args) {
   
     Contato cont= new Contato("Fulano","99999999","A","c",1);

Não sei dizer…

Dragoon você me ensinou bastante, muito obrigado! Um abraço

Agora estou a tentar entender como devo criar um método de Alteração na classe agenda, acho que só ficou faltando essa parte… ele tem que:

“Caso o nome de um contato sendo inserido já exista na agenda, a inserção se torna
uma alteração. A remoção atribui null a posição do contato removido.”

Estive pensando…
eu chamo o método de busca e se for “true” para a existência do nome requerido… e o código deve chamar um novo método de “alteração” que preciso criar. Ou deveria modificar o próprio método inserção para ele realizar a tarefa de alterar um contato?

Muitos Obrigados!