Mais Posts
18/01/2012
Luciano Cargnelutti
Hahahhahaha!
Murilo, se quiser acho q vc pode deixar o toString() pra depois. É mais simples do que vc imagina, mas acho que 1 semana de Java é pouco para realmente entender o objetivo dele...
EDIT:
Pare de editar minha msg!! ><
EDIT:
Não paro não :D
19/01/2012
Luciano Cargnelutti
Eita... vamos voltar ao trabalho, onde estávamos mesmo? Falta fazer o Procurar... posto já o código!
19/01/2012
Luciano Cargnelutti
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public boolean existe(String telefone){
int i=0;
boolean tem = true;
for (Pessoa p: pessoas){
if (p.getTelefone().equals(telefone) == true){
i++;
}
}
if (i==0){tem = false;}
if (i>0){tem = true;}
return tem;
}
public void apagar(){
System.out.println("Digite o nome que deseja apagar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas)
if(p.getNome().equals(nome)){
pessoas.remove(p);
break;
}
System.out.println("Cadastro apagado com sucesso!");
msgVoltar();
}
public void listar(){
int a = pessoas.size();
System.out.println("A agenda tem "+a+" número(s) cadastrado(s)!");
System.out.println("===========================");
System.out.println("Nome Telefone Email");
for (Pessoa p : pessoas)
System.out.println(p);
System.out.println("===========================");
msgVoltar();
}
public void procurar(){
System.out.println("Digite o nome que deseja apagar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas)
if(p.getNome().equals(nome)){
System.out.println(p);
}
msgVoltar();
}
public void msgVoltar(){
System.out.println("Tecle Enter para voltar!");
String opc = scanner.nextLine();
}
public void cadastrar(){
System.out.println("Formulário de cadastro:");
System.out.println("Digite o nome:");
String nome = scanner.nextLine();
System.out.println("Digite o telefone:");
String telefone = scanner.nextLine();
System.out.println("Digite o email:");
String email = scanner.nextLine();
if (existe(telefone) == false){
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
System.out.println("Cadastro realizado com sucesso!");
msgVoltar();
}else{
System.out.println("Número já cadastrado, favor tente outro número!");
msgVoltar();
}
}
public void sair(){
}
public void menu(){
int opc;
do{
System.out.println("=================");
System.out.println("Agenda Telefônica");
System.out.println("=================");
System.out.println("1 - Cadastrar");
System.out.println("2 - Procurar");
System.out.println("3 - Listar todos");
System.out.println("4 - Apagar");
System.out.println("0 - Sair");
System.out.println("==>");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
apagar();
break;
}
}while(opc != 0);
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
Pronto, tá aí. Fiz algumas alterações:
Como se trata de uma agenda telefônica, pode existir vários nomes iguais, porem, com números diferente, logo, o método de verificação agora, verifica se o telefone já existe, permitindo o cadastro de pessoas com o mesmo nome.
O método procurar encontra apenas os nomes conforme for digitado, ele não faz uma busca "detalhada", por exemplo, se eu digitar Murilo, vai aparecer apenas os cadastros com o nome Murilo, ele método procurar não tem o poder de procurar quem tenha "rilo" no nome por exemplo, não sei o nome disso em java, assim que descobrir implementarei ele nesse projeto!
Pronto galera(SEEK, mas precisamente), tá ai, fraquinho já que eu me preocupei mais com as funcionalidades do que com a boniteza, qualquer crítica, elogio, pedrada será bem vindo. Aguardo a avaliação de vocês, ficou legal?
19/01/2012
Luciano Cargnelutti
Pow cara, ficou muito bom!
Nem da pra acreditar que você começou em java a tão pouco tempo!
conheço gente que conhece java a muito mais tempo, eu passei esse exercício da agenda 2 semanas antes do que eu passei pra você, e ainda não conseguiram fazer nem o cadastrar!
Parabens mesmo cara!
Agora, ta pronto pra ir adicionando funcionalidades nessa agenda até ela ficar fodástica?
19/01/2012
Luciano Cargnelutti
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
19/01/2012
Luciano Cargnelutti
Bora partir para uma interface gráfica JOptionPane.
Então, primeiro de tudo: apague aquele método sair que está sobrando.
agora, faça uma nova funcionalidade para a sua agenda: Alterar
Alterar deixa o usuário procurar alguém pelo nome, e depois alterar o telefone ou o email dessa pessoa.
19/01/2012
Luciano Cargnelutti
Mas se tem vários nomes? Não é melhor pegar pelo telefone?
No "for" do método "Procurar" ele não tem break, se tiver ele vai parar no primeiro que achar e pode não ser o da pessoa iai?
PS: Só um troll mesmo pra já meter bronca xD
19/01/2012
Luciano Cargnelutti
Tive uma ideia, fala nada não, vou tentar fazer do jeito que imaginei, vai ser mais difícil mas, vai mostrar que eu to me ligando bem nas coisas, porem, só quando eu voltar da academia, FUI!
20/01/2012
Luciano Cargnelutti
Sorry SEEK a net caiu ontem e só voltou hoje¬¬
Quebrei a cara com minha ideia(pensei em fazer algo difícil, não impossível), era a seguinte:
A pessoa digitaria o nome de quem quer alterar os dados, logo apareceriam vários, se fosse o caso, esses vários seriam numerado por um contador colocado no "IF" do "FOR" até ai eu consegui, só que é o seguinte... Depois de listar e numerar os cadastros com os nomes iguais ele teria que escolher uma opção(o número dado aquele nome) para começar a edição só que dai eu não passei, se a sua ideia era essa bom senão você acha que devo continuar com essa ou fazer do seu jeito(não sei qual)?
Segue o código:
public void alterar(){
int cont = 0;
int opc;
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
cont++;
System.out.println(cont+"º "+p);
}
}
System.out.println("A busca encontrou "+cont+" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
opc = Integer.parseInt(scanner.nextLine());
//daqui em diante eu não sei o que fiz xD
for (int i = 0; i <= cont; i++){
if(i == opc){
for (Pessoa p : pessoas){
System.out.println(pessoas.indexOf(i));
break;
}
}
}
msgVoltar();
}
Continue fazendo desse jeito!
é aqui que entra a mágica da Orientação a Objeto.
Dentro do método alterar, você vai criar mais uma ArrayList, essa ArrayList vai ser temporária (quando a chamada do método alterar() acabar, ela vai ser apagada)
Primeiro, você cria mais essa ArrayList, depois, você pede o nome para o usuário.
Percorra a ArrayList "pessoas" procurando pessoas com o nome igual, e, adicione-as nessa nova ArrayList temporária.
Como estamos trabalhando com [b]referências[/b] a objetos, qualquer alteração feita em qualquer objeto da ArrayList temporária, também vai surtir efeito nos objetos da ArrayList principal, pois os objetos são os mesmos!
A ArrayList temporária só vai servir pra ficar com os indices em ordem, para o usuário poder escolher.
20/01/2012
Luciano Cargnelutti
Como eu vou criar uma ArrayList temporária? Ela vai acabar quando eu chamar o Alterar()? Se ela ta no alterar como ela vai acabar assim que eu chamar o método?
"Como estamos trabalhando com referências a objetos, qualquer alteração feita em qualquer objeto da ArrayList temporária, também vai surtir efeito nos objetos da ArrayList principal, pois os objetos são os mesmos!" Essa aqui eu meio que entendi, vendo o que fiz os valores que poderão ser alterados foram adicionados na ArrayList temporária, como uma alteração que eu fizer nela vai implicar em uma alteração na ArrayList principal?
Certo isso aqui? A Array temporária pegando os dados que podem ser alterados?
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
cont++;
System.out.println(cont+"º "+p);
temp.add(p);
}
}
20/01/2012
Luciano Cargnelutti
[quote="Murilo Lilo"]Como eu vou criar uma ArrayList temporária? Ela vai acabar quando eu chamar o Alterar()? Se ela ta no alterar como ela vai acabar assim que eu chamar o método?
Qualquer variável declarada dentro de um método (ou outro bloco de código [if, for, while, etc]) só tem o escopo dentro daquele bloco de código, e vai "sumir" assim que o bloco de códigos terminar.
Não precisa você se preocupar em apagar ela, ela vai ser apagada pelo GarbageCollector sozinha.
[quote="Murilo Lilo"]
Certo isso aqui? A Array temporária pegando os dados que podem ser alterados?
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
cont++;
System.out.println(cont+"º "+p);
temp.add(p);
}
}
É isso mesmo, agora para alterar você pega a pessoa da ArrayList temp
(só uma coisa: Indices começam em 0, o seu vai começar em 1 e vai dar errado)
int index = //lê a opção que o usuário escolheu
Pessoa p = temp.get(index);
agora você altera as informações usando a referencia "p"
e lembre-se de usar os métodos setters!
20/01/2012
Luciano Cargnelutti
[quote="sekkuar"]agora você altera as informações usando a referencia "p"
e lembre-se de usar os métodos setters!
Não entendi bem cara, "alterar as informações usando a referência "P" isso quer dizer que todas as alterações que eu fizer nos dados, já que ta sendo referenciado o P ai vai mudar lá também?
Usar os métodos set? Confesso que eu não sei como vou fazer isso. Com o método set eu vou setar o valores na ArrayList temp e em seguida eu pego os novas dados? Com o get?
[quote="Murilo Lilo"][quote="sekkuar"]agora você altera as informações usando a referencia "p"
e lembre-se de usar os métodos setters!
Não entendi bem cara, "alterar as informações usando a referência "P" isso quer dizer que todas as alterações que eu fizer nos dados, já que ta sendo referenciado o P ai vai mudar lá também?
Usar os métodos set? Confesso que eu não sei como vou fazer isso. Com o método set eu vou setar o valores na ArrayList temp e em seguida eu pego os novas dados? Com o get?
qualquer alteração feito em "p" vai ser alterado na pessoa da ArrayList "pessoas" e "temp" também, pois são o mesmo objeto, com referências diferentes.
Usar os métodos setters, é usar os setters da classe Pessoa (setNome, setTelefone, setEmail)