Murilo Lopes
11/01/2012
Aff cara, que cagada... Era pra ser uma MP... Sorry
GOSTEI 0
Douglas Eric
11/01/2012
kkkkkkkkkkkkkkkkkkkkkkk
Ok, tudo bem, pode ser um tópico mesmo.
primeiro de tudo, não, eu *ainda* não sou professor (so pros meus colegas de classe) e nem fodão em java, eu só aprendo bem rápido.
e, olha, realmente, passar pra GUI direto sem fazer um programinha em linha de comando é ruim.
não porque você não vai conseguir, tenho certeza que com persistencia você consegue sim, mas, é porque você vai deixar de aprender muita coisa, e que te fará falta no futuro.
Se quiser, posso ser meio que um tutor em um pequeno programinha, em linha de comando pra você fazer.
passei pra uma colega da minha sala e ela está se matando pra conseguir terminar, posso passar pra você também.
É bem simples: uma agenda telefônica.
GOSTEI 0
Murilo Lopes
11/01/2012
Começando agora, só me dê mais informações, se existir, ou ela também só ouvir "Agenda telefônica"?
GOSTEI 0
Douglas Eric
11/01/2012
não.
É assim:
seu programa deve montar um menu de opções com as opções Inlcuir, Procurar, Apagar e Listar Todos os cadastros.
Você precisa ter uma classe Pessoa, com construtor, getters e setters
e uma ArrayList para salvar as pessoas cadastradas.
GOSTEI 0
Rogercf
11/01/2012
[quote="sekkuar"]seu programa deve montar um menu de opções com as opções Inlcuir, Procurar, Apagar e Listar Todos os cadastros.
Você precisa ter uma classe Pessoa, com construtor, getters e setters
e uma ArrayList para salvar as pessoas cadastradas.
Tempo previsto pra alguem experiente: 10 minutos
Pra alguem sem experiencia: 10 dias
Engraçado como em programação é um absurdo a diferença de tempo pra se fazer algo no inicio do aprendizado e depois q vc ja fez alguns programas
GOSTEI 0
Murilo Lopes
11/01/2012
Não vou fazer mais nenhuma pergunta... E no máximo até terça feira eu faço isso(2 dias, pois viajarei amanhã e só volto domingo).
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
GOSTEI 0
Rogercf
11/01/2012
vai fundo cara
Eu falei 10 dias pra exagerar, mas da de fazer em 1 dia mesmo q vc tenha q pesquisar tudo (Google), depende da vontade da pessoa em correr atrás
Mas depois q vc terminar vai ver q o resultado são poucas linhas de código, a maior parte do tempo vc vai passar pesquisando/testando/tirando duvidas
E pra alguem com experiencia é só o tempo de digitar essas 100 linhas uma atrás da outra, por q é um problema muito simples nesse caso proposto
Eu lembro q no primeiro semestre da faculdade levava horas pra fazer coisas q hoje faço em minutos, é muito legal olhar pra trás e ver o quanto vc evoluiu
GOSTEI 0
Rogercf
11/01/2012
[quote="Murilo Lilo"]Não vou fazer mais nenhuma pergunta... E no máximo até terça feira eu faço isso(2 dias, pois viajarei amanhã e só volto domingo).
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
Parabéns pela iniciativa. Boa sorte e divirta-se (GL & HF)!
Precisando 'tamos aí!
GOSTEI 0
Mathews Motta
11/01/2012
Parabéns. Independente do que esteja no seu futuro, é claro a sua vontade de aprender. Por isso, parabéns. Simplesmente por ser um bom aluno é digno de um parabéns, certo?
O que realmente importa não é o que agente sabe atualmente, mas sim o que agente está disposto a correr atrás. Isso vale para tudo nesse mundo.
Esse programa que o sekkuar pediu é genial. Uma agenda telefônica. Uma coisa tão simples vai fazer você usar uma GRANDE parte de tudo que é mais básico em Orientação a Objeto e Java. Fazer esse programa vai fazer vc pesquisar sobre alguns tópicos muito importantes mais usados.
Esqueça a GUI por enquando. Sei que muito mais divertido uma aplicação que vc faz botõeszinhos e coisas clicáveis, mas a GUI em si é algo bem simples. Ela é mais trabalhosa do que difícil, e acho que o tempo perdido para fazer aplicações em GUI(pelo menos eu que não gosto de gerar nada, senão nao aprendo hehe...) é muito grande e desnecessário.
O primeiro passo para entender Java é quebrar a lógica estruturada da sua cabeça. Para aprender linguagens de programação novas é necessário ter a cabeça muito aberta, senão você não vai aceitar as regras daquela linguagem e, consequentemente, não irá aprender.
Se ficar em dúvida, peça dicas dos tópicos que vc deve procurar ;) Sekkuar já deu uma idéia no outro post. Boa programação!
GOSTEI 0
Murilo Lopes
11/01/2012
Queria não ter dúvidas mais é o jeito...
Tô com as seguintes dúvidas:
Você precisa ter uma classe Pessoa, com construtor, getters e setters
Quer dizer que eu tenho que ter uma classe(Pessoa) que conterá apenas Get's e Set's dos atributos(Nome, Número, Email) e os atributos lógico? E o "com construtor"? Não entendi bem o que quer dizer... Explica ai por favor!
e uma ArrayList para salvar as pessoas cadastradas
GOSTEI 0
Douglas Eric
11/01/2012
http://javafree.uol.com.br/topic-4424-Como-funciona-o-metodo-construtor.html
http://javafree.uol.com.br/topic-5962-Collection-e-ArrayList.html
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"]kkkkkkkkkkkkkkkkkkkkkkk
Ok, tudo bem, pode ser um tópico mesmo.
primeiro de tudo, não, eu *ainda* não sou professor (so pros meus colegas de classe) e nem fodão em java, eu só aprendo bem rápido.
e, olha, realmente, passar pra GUI direto sem fazer um programinha em linha de comando é ruim.
não porque você não vai conseguir, tenho certeza que com persistencia você consegue sim, mas, é porque você vai deixar de aprender muita coisa, e que te fará falta no futuro.
Se quiser, posso ser meio que um tutor em um pequeno programinha, em linha de comando pra você fazer.
passei pra uma colega da minha sala e ela está se matando pra conseguir terminar, posso passar pra você também.
É bem simples: uma agenda telefônica.
Além da expressão popular: "Se matar de estudar" você tem alguma outra dica a quem quer aprender java bem rápido? Apesar do meu desempenho estar satisfatório (na minha opinião) entendo que falta um bocado (eternidade, sendo sincero) para fazer algo que o Steve Jobs considere melhor que uma M....
kkkkkkk
O potencial humano é fantastico, mas, por alguma razão a maioria fica na média, que está muuuito aquém do potencial humano.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="leandro_1981"][quote="sekkuar"]kkkkkkkkkkkkkkkkkkkkkkk
Ok, tudo bem, pode ser um tópico mesmo.
primeiro de tudo, não, eu *ainda* não sou professor (so pros meus colegas de classe) e nem fodão em java, eu só aprendo bem rápido.
e, olha, realmente, passar pra GUI direto sem fazer um programinha em linha de comando é ruim.
não porque você não vai conseguir, tenho certeza que com persistencia você consegue sim, mas, é porque você vai deixar de aprender muita coisa, e que te fará falta no futuro.
Se quiser, posso ser meio que um tutor em um pequeno programinha, em linha de comando pra você fazer.
passei pra uma colega da minha sala e ela está se matando pra conseguir terminar, posso passar pra você também.
É bem simples: uma agenda telefônica.
Além da expressão popular: "Se matar de estudar" você tem alguma outra dica a quem quer aprender java bem rápido? Apesar do meu desempenho estar satisfatório (na minha opinião) entendo que falta um bocado (eternidade, sendo sincero) para fazer algo que o Steve Jobs considere melhor que uma M....
kkkkkkk
O potencial humano é fantastico, mas, por alguma razão a maioria fica na média, que está muuuito aquém do potencial humano.
Não é verdade. A maioria fica abaixo da "média" (fazendo a "média" cair cada vez mais). Infelizmente tudo se dá a pura e simples falta de comprometimento com as coisas...
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"]
Não é verdade. A maioria fica abaixo da "média" (fazendo a "média" cair cada vez mais). Infelizmente tudo se dá a pura e simples falta de comprometimento com as coisas...
[img]http://media.steampowered.com/steamcommunity/public/images/avatars/06/0643d14a8abf0a453ab8af83695825b000fffd6f_full.jpg[/img]
primeiro... "a maioria fica na média", isso é obvio, é por isso que ela é a média.
segundo... é impossível "a maioria" ficar abaixo da média, isso não faz a "média" cair, é simplesmente impossível!
Quando o nível de quem está "na média" ou acima dela cai, então a média como um todo cai.
Se a maioria estivesse "abaixo da média", a média não seria a média e "abaixo da média" seria a média, fazendo que os que estivessem "na média" estarem na verdade acima da média, o que ia causar a média em subir!
ou seja, um paradoxo. não funciona.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="ryuuji"]
Não é verdade. A maioria fica abaixo da "média" (fazendo a "média" cair cada vez mais). Infelizmente tudo se dá a pura e simples falta de comprometimento com as coisas...
[img]http://media.steampowered.com/steamcommunity/public/images/avatars/06/0643d14a8abf0a453ab8af83695825b000fffd6f_full.jpg[/img]
primeiro... "a maioria fica na média", isso é obvio, é por isso que ela é a média.
segundo... é impossível "a maioria" ficar abaixo da média, isso não faz a "média" cair, é simplesmente impossível!
Quando o nível de quem está "na média" ou acima dela cai, então a média como um todo cai.
Se a maioria estivesse "abaixo da média", a média não seria a média e "abaixo da média" seria a média, fazendo que os que estivessem "na média" estarem na verdade acima da média, o que ia causar a média em subir!
ou seja, um paradoxo. não funciona.
Por isso eu coloquei entre aspas. Porque essa "média" é sempre acima do nível da maioria. O problema é que, como a maioria está abaixo dessa "média" (observe as aspas), isso só tende a piorar, ou seja, essa considerada "média" acaba REALMENTE caindo, para se igualar a burrice geral da média verdadeira.
As aspas explicam tudo meu caro. Tudo. XDDDD
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"]
As aspas explicam tudo meu caro. Tudo. XDDDD
As aspas podem explicar qualquer coisa, exceto um paradoxo. -.-
[size=4]apenas o [url=http://www.youtube.com/watch?v=jVinP2Y0iLQ]wheatley[/url] consegue fazer isso[/size]
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][size=4]apenas o [url=http://www.youtube.com/watch?v=jVinP2Y0iLQ]wheatley[/url] consegue fazer isso[/size]
Indeed.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"]
primeiro... "a maioria fica na média", isso é obvio, é por isso que ela é a média.
Hm.... Talvez mas não necessariamente!!!
Digamos que um grupo de 100 pessoas cada uma fez uma prova, e digamos que a nota média desse grupo foi 5.
Isso não quer dizer, necessariamente, que a maioria tirou 5!
Se 50 tiraram 10 e 50 tiraram 0, a média foi 5, mas ninguém ficou com uma nota "na média".
Brincando ainda um pouco com a matemática, é possível TAMBÉM que a maioria tenha tirado notas acima ou abaixo da média!
Digamos que a média tenha saído 5.15. Se 70 pessoas tiraram uma nota de 6.5 e 30 pessoas tiraram nota 2, a [b]maioria das pessoas[/b] foi acima da média!
Média é uma coisa extremamente relativa. Se, nesse grupo, digamos que 50 tiraram uma nota na média. Se 30 tiraram acima da média e 20 tiraram abaixo da média, dependendo da nota dos 30 e também da nota dos 20, as pessoas que estão "na média" podem oscilar e ficar abaixo da média, por exemplo. Porém, na verdade, a média é uma coisa geral, então estamos contanto também com quem tá na média, então eles não estarão oscilando, mas sim participando do cálculo, o que, provavelmente, tornará eles dentro da média de novo....
Na prática, o normal é a maior parte ficar dentro ou próximo à média, mas o que estou falando aqui é que é possível outros quadros acontecerem.
.....
... E Portal 2 e um jogo do C....!!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="MathewsMotta"][...]
Certo certo, mas você está falando de números!
nós estamos falando de pessoas!
é diferente falar que X pessoas tiraram N de nota e a média foi Y
nós estamos classificando as pessoas pela sua capacidade e/ou vontade de aprender.
por exemplo, podemos dizer que existem
Gênios
Muito bons
Bom
Acima da média
Na média
Abaixo da média
Ruim
Burro
e o Quico.
nesse tipo de classificação, se existirem 10 gênios e 10 Quicos, não poderiamos tirar uma "média" disso.
GOSTEI 0
Murilo Lopes
11/01/2012
Cara, eu tava lendo a parada do construtor, mas quando cheguei aqui pra dizer o que eu entendi percebi que não entendi nada...
Construtor:
"é o método onde tem as instrucoes que serao executadas SEMPRE que for instanciado um objeto desta classa"
Tenho a classe "Pessoa" onde vai ter os atributos e os seus respectivos Gets's Sets's e o métodos(Adicionar, Listar...) até então certo?
public class MinhaClasse {
public MinhaClasse() { //esse é o metodo construtor
System.out.println("Oi!");
}
}
Isso ai encima equivale a isso aqui em baixo?
public static void main(String[] args) {
}
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Cara, eu tava lendo a parada do construtor, mas quando cheguei aqui pra dizer o que eu entendi percebi que não entendi nada...
Construtor:
"é o método onde tem as instrucoes que serao executadas SEMPRE que for instanciado um objeto desta classa"
Tenho a classe "Pessoa" onde vai ter os atributos e os seus respectivos Gets's Sets's e o métodos(Adicionar, Listar...) até então certo?
public class MinhaClasse {
public MinhaClasse() { //esse é o metodo construtor
System.out.println("Oi!");
}
}
Isso ai encima equivale a isso aqui em baixo?
public static void main(String[] args) {
}
não...
Faz o seguinte:
public class MinhaClasse {
public MinhaClasse() { //esse é o metodo construtor
System.out.println("Oi!");
}
}
public static void main(String[] args) {
new MinhaClasse();
new MinhaClasse();
new MinhaClasse();
}
me diz o que acontece.
GOSTEI 0
Murilo Lopes
11/01/2012
Eu não fiz nada não pow, só estava tentando entender, mas agora acho que vi outra coisa.
Na classe Pessoa tem o método construtor, na mesma classe tem todas as outras coisas(Atributos, métodos, get...). Nesse método construtor vou colocar tudo que vai ser executado, porem, isso só vai ser executado quando numa classe Main(criada para iniciar o programa) o construtor for chamado?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Eu não fiz nada não pow, só estava tentando entender, mas agora acho que vi outra coisa.
Na classe Pessoa tem o método construtor, na mesma classe tem todas as outras coisas(Atributos, métodos, get...). Nesse método construtor vou colocar tudo que vai ser executado, porem, isso só vai ser executado quando numa classe Main(criada para iniciar o programa) o construtor for chamado?
não.
Calma... muita calma, você está indo muito depressa.
Primeiro de tudo: rode esse código que eu passei no ultimo post, quantas vezes o código System.out.println("Oi!"); é executado?
e por que?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="Murilo Lilo"]Eu não fiz nada não pow, só estava tentando entender, mas agora acho que vi outra coisa.
Na classe Pessoa tem o método construtor, na mesma classe tem todas as outras coisas(Atributos, métodos, get...). Nesse método construtor vou colocar tudo que vai ser executado, porem, isso só vai ser executado quando numa classe Main(criada para iniciar o programa) o construtor for chamado?
não.
Calma... muita calma, você está indo muito depressa.
Primeiro de tudo: rode esse código que eu passei no ultimo post, quantas vezes o código System.out.println("Oi!"); é executado?
e por que?
Teacher sekkuar! XDDD
Boa aula, btw.
GOSTEI 0
Murilo Lopes
11/01/2012
Ele foi executado 3 vezes.
Por que para cada:
Todos os comandos que estiverem em:
public class Pessoa {
public Pessoa() { //Aqui mais precisamente
System.out.println("Oi!");
}
}
Serão executados
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]Ele foi executado 3 vezes.
Por que para cada:
Todos os comandos que estiverem em:
public class Pessoa {
public Pessoa() { //Aqui mais precisamente
System.out.println("Oi!");
}
}
Serão executados
Mas o que acontece cada vez que você executa:
?
GOSTEI 0
Murilo Lopes
11/01/2012
Oi!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Ele foi executado 3 vezes.
Por que para cada:
Todos os comandos que estiverem em:
public class Pessoa {
public Pessoa() { //Aqui mais precisamente
System.out.println("Oi!");
}
}
Serão executados
exatamente!
Agora imagine, você pode (e deve) usar o construtor para inciar os objetos.
Nesse exemplo, todos eles executam a mesma coisa, mas, se você colocar [i]argumentos[/i] no construtor, pode alterar como ele é executado.
public class Pessoa {
private String nome;
public Pessoa(String nome) {
System.out.println(nome);
this.nome = nome;
}
}
agora chamando este construtor, você vai criar objetos pessoas, e já atribuir um nome a eles
new Pessoa("sekkuar");
new Pessoa("ryuuji");
Cada objeto pessoa é uma pessoa diferente, e você usa o construtor para iniciar os dados!
GOSTEI 0
Murilo Lopes
11/01/2012
Entendi...
agora essa linha aqui:
Traduz ela por favor!
@EDIT:
this quer dizer que a variável é "local"
super quer dizer que a variável é "global?"
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Entendi...
agora essa linha aqui:
Traduz ela por favor!
você tem duas variáveis com o nome "nome", uma é uma variável local do construtor, e a outra é a variável de atributo do objeto Pessoa.
quando você usa uma variável dentro de um método, ele sempre vai usar primeira a variável local, o unico jeito de usar a variável de atributo, é com a palavra chave [color=blue]this[/color]
ou seja
É a mesma coisa que dizer "atribua a variável de atributo 'nome' o valor da variável local (que foi passada por parametro) 'nome' "
[quote="Murilo Lilo"]
this quer dizer que a variável é "local"
super quer dizer que a variável é "global?"
não!
this quer dizer "a variável DESTE objeto"
super quer dizer "a variável da SUPERCLASSE"
GOSTEI 0
Murilo Lopes
11/01/2012
Saquei
this.nome = nome; tô atribuindo a variável local nome o valor que a variável de atributo(a que ta como parâmetro) certo?
Sim e agora? Entendi o construtor, faço o que agora?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]
this.nome = nome; tô atribuindo a variável local nome o valor que a variável de atributo(a que ta como parâmetro) certo?
ao contrário!
[quote="Murilo Lilo"]
Sim e agora? Entendi o construtor, faço o que agora?
não sei. O que falta você fazer?
termine a classe Pessoa, com os atributos, construtor, getters e setters.
GOSTEI 0
Douglas Eric
11/01/2012
Deixa eu tentar explicitar melhor o this:
PS: Isso é apenas uma ilustração! Não é recomendado fazer tal prática, é apenas para vc entender o que ocorre.
public class Pessoa {
private String nomeNessaClasse;
public Pessoa(String nomeQueRecebe) {
this.nomeNessaClasse = nomeQueRecebe;
}
}
Ou seja, qdo vc vê this.nome = nome, significa que a classe, que possui a variável "nome" está recebendo um nome de alguém que a chamou.
lembra quando vc fez:
Pessoa pessoa = new Pessoa("Fulano");
?
Esse "Fulano" é o "nomeQueRecebe". Ou seja, o this.nome, que é a variável nome DA CLASSE, receberá o argumento nomeQueRecebe(No caso, "Fulano").
GOSTEI 0
Murilo Lopes
11/01/2012
Pronto saquei essa parte...
Vou postar mais algumas dúvidas:
Get's e Set's o que cada um faz? (As vezes penso que sei, mas logo vejo que não sei nada D=)
Scanner, serve para pegar dados do usuário? ou o get e o set faz isso?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Pronto saquei essa parte...
Vou postar mais algumas dúvidas:
Get's e Set's o que cada um faz? (As vezes penso que sei, mas logo vejo que não sei nada D=)
Scanner, serve para pegar dados do usuário? ou o get e o set faz isso?
Não misture as coisas!
Getters e Setters
http://www.vivaolinux.com.br/dica/Entendendo-os-getters-e-setters-em-Java
e também esse tópico é um bom exemplo do que NÃO fazer
http://javafree.uol.com.br/topic-883391-Problema-com-getters-e-setters-e-this.html
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Pronto saquei essa parte...
Vou postar mais algumas dúvidas:
Get's e Set's o que cada um faz? (As vezes penso que sei, mas logo vejo que não sei nada D=)
Scanner, serve para pegar dados do usuário? ou o get e o set faz isso?
Get's e Set's, em resumo, são métodos públicos de acesso, ou simplesmente métodos de acesso.
Sua idéia é simples. Não é interessante para a aplicação que os atributos de uma classe sejam acessáveis por qualquer outra parte do programa. É aí que entra o Get e Set, que servem, como o nome sugere, respectivamente, para você obter um valor de um atributo privado, ou definir um novo valor a um atributo privado.
Veja o exemplo da classe Pessoa do sekkuar. O atributo "nome" é privado!
Mas CUIDADO: Nem todo atributo precisa de um get e um set. E isso meu amigo, você com certeza pode errar bastante. Mas com um tempo de costume e abstração vai ver a necessidade(ou não) do get e set.
Vendo o exemplo do sekkuar, naquele caso ele definiu nome no construtor. Ou seja, toda vez que uma instância daquela classe é criada e referenciada, você é obrigado a definir o nome da pessoa. Seria, então, interessante criar um get e um set, uma vez que ele já está definindo o nome no construtor?
[b]MAS É CLARO![/b] Além de possibilitar a mudança do atributo nome daquela referência, ainda nos proporciona OBTER o valor de 'nome'.
@Scanner
A classe scanner, como o nome TAMBÉM sugere, é uma classe que, em resumo, lê dados. Seja dados de entrada do TECLADO direto na aplicação, seja de um arquivo, enfim... No seu caso, você provavelmente vai usar por agora leitura de dados direto do teclado.
Deixa eu aproveitar e te passar uma coisa muito interessante, chamada JavaDoc:
http://docs.oracle.com/javase/7/docs/api/
Nesse link temos um database de todas as classes padrões do Java. Entre nela e dê um CTRL+F procurando por Scanner ali na esquerda que vc deve achar mais detalhes sobre a classe Scanner, por exemplo!
Se falei alguma besteira nesse post, por favor me corrijam.
GOSTEI 0
Murilo Lopes
11/01/2012
Vamos ver o que eu produzi até então:
Arquivo "Pessoa.java":
package ListaPackage;
import java.util.Scanner;
public class Pessoa {
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String nome;
private String telefone;
private String email;
public Pessoa() {
Scanner scanner = new Scanner(System.in);
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();
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
}
Arquivo "Main.java":
package ListaPackage;
public class Main {
public static void main(String[] args) {
new Pessoa();
}
}
Até ai tirei 10? Se não for encontrado nenhum erro irei para a próxima etapa, a ArrayList!
@EDIT:
Entendi 100% do que tá escrito ai, porem, só fiz copiar e colar(de um tópico ai que eu entendi) pra poder postar mais rápido.
GOSTEI 0
Douglas Eric
11/01/2012
eu te dou um 7.5
Não gostei de criar o Scanner dentro do construtor
e Também não gostei do seu construtor não ter parâmetros.
Solução melhor seria:
Scanner dentro do main;
lê o nome, telefone e email e salva em variáveis String
cria um construtor que recebe as 3 Strings
cria um objeto pessoa, passando as Strings como argumento.
A classe pessoa serve só para salvar/retornar as informações, não para lê-las.
GOSTEI 0
Renan Zimmer
11/01/2012
Eu particularmente, tento usar sets e gets só em ultimo caso. Tu tem que ter em mente o que o teu objeto tem e o que ele pode fazer com isso. Ex:
Esses dias estava discutindo sobre um codigo de uma aplicaçãozinha web pra fazer alguns calculos de peso e outras viadagens no sistemas solar. Os planetas tinham como atributos a gravidade, raio e outras coisas.
A questão foi a seguinte: Queria-se descobrir o peso de alguem em determinado planeta digitando-se apenas a massa do corpo. O código antes tinha uma classe (não lembro o nome, mas era algo como) CalculadoraDePeso que utilizava um GET pras gravidades dos planetas. Na discussão, chegamos a um consenso, mais valia jogar o valor da massa pra cada planeta, e o planeta dizia qual seria o peso. Os planetas tinham tudo pra resolver o problema, nao era necessário que alguem "metesse o dedo" em seus atributos.
GOSTEI 0
Murilo Lopes
11/01/2012
Eu ia perguntar sobre o construtor com as 3 Strings como parâmetros, mas agora vou fazer do jeito que você explicou, logo tô postando!
GOSTEI 0
Mathews Motta
11/01/2012
Murilo, pense um pouco sobre sua aplicação.
Se a sua classe scanner e todas as perguntas estão dentro da classe Pessoa, no construtor, qual é a utilidade do get e set? De nada importa eles se vc está modificando-os por dentro de sua classe! Começa por aí.
Deu para ver que vc ainda não quebrou o paradigma estruturado completamente.
Você não pode colocar TUDO o que seu programa vai fazer dentro de uma classe. Entende?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="renanzimmer"]Eu particularmente, tento usar sets e gets só em ultimo caso. Tu tem que ter em mente o que o teu objeto tem e o que ele pode fazer com isso. Ex:
Esses dias estava discutindo sobre um codigo de uma aplicaçãozinha web pra fazer alguns calculos de peso e outras viadagens no sistemas solar. Os planetas tinham como atributos a gravidade, raio e outras coisas.
A questão foi a seguinte: Queria-se descobrir o peso de alguem em determinado planeta digitando-se apenas a massa do corpo. O código antes tinha uma classe (não lembro o nome, mas era algo como) CalculadoraDePeso que utilizava um GET pras gravidades dos planetas. Na discussão, chegamos a um consenso, mais valia jogar o valor da massa pra cada planeta, e o planeta dizia qual seria o peso. Os planetas tinham tudo pra resolver o problema, nao era necessário que alguem "metesse o dedo" em seus atributos.
Mas dae depende do caso!
A sua classe CalculadoraDePeso pode ser inútil, se ela só fazia o que os planetas faziam entre si.
Mas agora, pegue como exemplo essa própria agenda telefônica.
A classe pessoa é praticamente um [url=http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects]POJO[/url], ela só tem uma função: Armazenar os dados da pessoa, só isso e nada mais.
nesse caso, os gets e setters SÃO necessários, porque todo o controle vai ser feito em outra parte do programa.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="renanzimmer"]Eu particularmente, tento usar sets e gets só em ultimo caso. Tu tem que ter em mente o que o teu objeto tem e o que ele pode fazer com isso. Ex:
Esses dias estava discutindo sobre um codigo de uma aplicaçãozinha web pra fazer alguns calculos de peso e outras viadagens no sistemas solar. Os planetas tinham como atributos a gravidade, raio e outras coisas.
A questão foi a seguinte: Queria-se descobrir o peso de alguem em determinado planeta digitando-se apenas a massa do corpo. O código antes tinha uma classe (não lembro o nome, mas era algo como) CalculadoraDePeso que utilizava um GET pras gravidades dos planetas. Na discussão, chegamos a um consenso, mais valia jogar o valor da massa pra cada planeta, e o planeta dizia qual seria o peso. Os planetas tinham tudo pra resolver o problema, nao era necessário que alguem "metesse o dedo" em seus atributos.
Mas dae depende do caso!
A sua classe CalculadoraDePeso pode ser inútil, se ela só fazia o que os planetas faziam entre si.
Mas agora, pegue como exemplo essa própria agenda telefônica.
A classe pessoa é praticamente um [url=http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects]POJO[/url], ela só tem uma função: Armazenar os dados da pessoa, só isso e nada mais.
nesse caso, os gets e setters SÃO necessários, porque todo o controle vai ser feito em outra parte do programa.
Sim, sem dúvidas, o post foi só pra ficar atento quanto ao uso constante (irracional). Classico vicio de programação.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="renanzimmer"][quote="sekkuar"][quote="renanzimmer"]Eu particularmente, tento usar sets e gets só em ultimo caso. Tu tem que ter em mente o que o teu objeto tem e o que ele pode fazer com isso. Ex:
Esses dias estava discutindo sobre um codigo de uma aplicaçãozinha web pra fazer alguns calculos de peso e outras viadagens no sistemas solar. Os planetas tinham como atributos a gravidade, raio e outras coisas.
A questão foi a seguinte: Queria-se descobrir o peso de alguem em determinado planeta digitando-se apenas a massa do corpo. O código antes tinha uma classe (não lembro o nome, mas era algo como) CalculadoraDePeso que utilizava um GET pras gravidades dos planetas. Na discussão, chegamos a um consenso, mais valia jogar o valor da massa pra cada planeta, e o planeta dizia qual seria o peso. Os planetas tinham tudo pra resolver o problema, nao era necessário que alguem "metesse o dedo" em seus atributos.
Mas dae depende do caso!
A sua classe CalculadoraDePeso pode ser inútil, se ela só fazia o que os planetas faziam entre si.
Mas agora, pegue como exemplo essa própria agenda telefônica.
A classe pessoa é praticamente um [url=http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects]POJO[/url], ela só tem uma função: Armazenar os dados da pessoa, só isso e nada mais.
nesse caso, os gets e setters SÃO necessários, porque todo o controle vai ser feito em outra parte do programa.
Sim, sem dúvidas, o post foi só pra ficar atento quanto ao uso constante (irracional). Classico vicio de programação.
você está falando disso aqui:
http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/
GOSTEI 0
Murilo Lopes
11/01/2012
É eu sinto dificuldade em entender um ou outro nome, acho que eu peguei bem programação estruturada, por isso que não me desfiz totalmente dela ainda e até por que ainda to aprendendo a OO e eu acho que ela requer um pouco mais de tempo pra sacar bem.
SEKK me diz uma coisa:
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
cria um objeto pessoa, passando as Strings como argumento é isso abaixo?
Pessoa objPessoa = new Pessoa(nome, telefone, email);
e qual a diferença disso acima para isso abaixo?
new Pessoa(nome, telefone, email);
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="sekkuar"][quote="renanzimmer"][quote="sekkuar"][quote="renanzimmer"]Eu particularmente, tento usar sets e gets só em ultimo caso. Tu tem que ter em mente o que o teu objeto tem e o que ele pode fazer com isso. Ex:
Esses dias estava discutindo sobre um codigo de uma aplicaçãozinha web pra fazer alguns calculos de peso e outras viadagens no sistemas solar. Os planetas tinham como atributos a gravidade, raio e outras coisas.
A questão foi a seguinte: Queria-se descobrir o peso de alguem em determinado planeta digitando-se apenas a massa do corpo. O código antes tinha uma classe (não lembro o nome, mas era algo como) CalculadoraDePeso que utilizava um GET pras gravidades dos planetas. Na discussão, chegamos a um consenso, mais valia jogar o valor da massa pra cada planeta, e o planeta dizia qual seria o peso. Os planetas tinham tudo pra resolver o problema, nao era necessário que alguem "metesse o dedo" em seus atributos.
Mas dae depende do caso!
A sua classe CalculadoraDePeso pode ser inútil, se ela só fazia o que os planetas faziam entre si.
Mas agora, pegue como exemplo essa própria agenda telefônica.
A classe pessoa é praticamente um [url=http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects]POJO[/url], ela só tem uma função: Armazenar os dados da pessoa, só isso e nada mais.
nesse caso, os gets e setters SÃO necessários, porque todo o controle vai ser feito em outra parte do programa.
Sim, sem dúvidas, o post foi só pra ficar atento quanto ao uso constante (irracional). Classico vicio de programação.
você está falando disso aqui:
http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/
Sim, eu tento ser muito compreensivel com o pessoal que ta pouco se lixando pra um codigo organizado.
Eu realmente sou muito chato com a histórial de POO. Tanto é que aínda nao ajudei ninguém aqui com o código em sí ou porque ja tinha gente ajudando, ou porque o código era um lixo (na minha opiniao), e se eu fosse modificar, transformaria completamente.
Pra mim, se o metodo main tem mais de 2 linhas, já ta fora de um conceito de POO, aliás, um método main já está fora, visto que é estático e nenhum objeto está sendo utilizado.
Se eu fosse listar aqui varias praticas comum em programação que eu sou contra, o pessoal ía me xingar e me jogar na cruz. Mas é por isso que a industria de software é igual uma de navios com casco furado.
Por outro lado, quando tenho oportunidade pra discutir metodos eficientes pra OO ou ED, nao me escondo. hehe
GOSTEI 0
Murilo Lopes
11/01/2012
Não sou Sekkuar, mas...
[quote="Murilo Lilo"]
SEKK me diz uma coisa:
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
Não. Você vai fazer o this.nome = nome, this.idade..........
[quote="Murilo Lilo"]
cria um objeto pessoa, passando as Strings como argumento é isso abaixo?
Pessoa objPessoa = new Pessoa(nome, telefone, email);
Isso. Você está [b]instanciando uma classe[/b], e está a referenciando a um [b]objeto[/b]!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]É eu sinto dificuldade em entender um ou outro nome, acho que eu peguei bem programação estruturada, por isso que não me desfiz totalmente dela ainda e até por que ainda to aprendendo a OO e eu acho que ela requer um pouco mais de tempo pra sacar bem.
SEKK me diz uma coisa:
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
cria um objeto pessoa, passando as Strings como argumento é isso abaixo?
Pessoa objPessoa = new Pessoa(nome, telefone, email);
Isso! exatamente assim, está perfeito.
[quote="Murilo Lilo"]
e qual a diferença disso acima para isso abaixo?
new Pessoa(nome, telefone, email);
A diferença é a seguinte.
Em java, qualquer objeto que não tenha nenhuma variável de referência é lixo, e será apagado o mais rápido possível.
Nesse segundo caso, você criou o objeto, mas ele não está salvo em lugar algum!
ou seja, é impossível você acessa-lo, e por isso ele vira lixo e morre.
A primeira forma, você salva ele em uma variável, enquanto ele estiver ali, não vai virar lixo e você vai poder continuar usando.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="MathewsMotta"]Não sou Sekkuar, mas...
[quote="Murilo Lilo"]
SEKK me diz uma coisa:
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
Não. Você vai fazer o this.nome = nome, this.idade..........
[quote="Murilo Lilo"]
cria um objeto pessoa, passando as Strings como argumento é isso abaixo?
Pessoa objPessoa = new Pessoa(nome, telefone, email);
Isso. Você está [b]instanciando uma classe[/b], e está a referenciando a um [b]objeto[/b]!
não tem problema algum se usar os sets no construtor.
Alias, dependendo do caso, é até melhor que se faça isso.
e, você nunca "instancia uma classe", você instancia um "objeto daquela classe". A differença entre os dois casos, é que na segunda, ele não tem nenhuma referencia ao objeto.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="sekkuar"]
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
Isso! exatamente assim, está perfeito.
Tem certeza? Se é o construtor, não havia a necessidade de usar o get e set, já que poderia modificar atributos privados.
Em todo caso, o resultado final é o mesmo que se vc fizesse this.nome = nome e etc(Isso porque ao usar o setNome você faz EXATAMENTE isso)
GOSTEI 0
Murilo Lopes
11/01/2012
E a parada do this? Devo usar? Se sim, onde?
Renan, pode falar mano, tô aprendendo, qualquer informação é bem vinda =D
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="MathewsMotta"][quote="sekkuar"]
cria um construtor que recebe as 3 Strings é isso abaixo?
public Pessoa(String nome, String email, String telefone) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
System.out.println("Informações da pessoa");
System.out.println(" nome: " + getNome());
System.out.println(" idade: " + getTelefone());
System.out.println(" peso: " + getEmail());
}
Isso! exatamente assim, está perfeito.
Tem certeza? Se é o construtor, não havia a necessidade de usar o get e set, já que poderia modificar atributos privados.
Em todo caso, o resultado final é o mesmo que se vc fizesse this.nome = nome e etc(Isso porque ao usar o setNome você faz EXATAMENTE isso)
Só porque você "pode" fazer alguma coisa, não quer dizer que deve, ou que ela é a unica ou melhor opção.
Pense bem: qual é a função dos setters? Colocar o valor na variável.
e dos getters? Retornar o valor.
não quer dizer que os getters e setters precisam ser usados apenas fora da classe. O propósito deles é sempre o mesmo.
Contanto que não se use algo para um propósito ao qual ele não foi feito, não existe problema algum em fazê-lo.
GOSTEI 0
Mathews Motta
11/01/2012
Só para constar.
Não se preocupe se não estiver entendendo orientação a objeto direito. É assim mesmo. Eu também vim a alguns meses pro Java, direto do C, e foi uma batalha dura quebrar o estruturado.
Mas sério, quando vc entender a lógica da Orientação a Objeto, quando as peças se encaixarem na sua cabeça, vc vai saber que coisa LINDA é esse tipo de paradigma.
É EXTREMAMENTE mais organizado do que oq vc via no estruturado. Além disso a manutenção e adição de elementos no programa é MUITO facilitada.
Continue firme e forte que quando vc começar a pegar o jeito legal vc não vai parar de estudar !
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]E a parada do this? Devo usar? Se sim, onde?
Renan, pode falar mano, tô aprendendo, qualquer informação é bem vinda =D
public Pessoa(String nome){
this.nome = nome;
}
public Pessoa(String nome){
setNome(nome);
}
Esses dois códigos são exatamente iguais.
Você pode fazer do jeito que achar melhor.
GOSTEI 0
Murilo Lopes
11/01/2012
Cara que coisa do capeta vei =D muita massa isso, o caba fica doido de tanta informação xD só que agora vou ter que dar uma saidinha e volto em umas duas horas, se poderem continuem a discussão que quando eu voltar vou ler tudinho =D até mais!
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="sekkuar"][quote="Murilo Lilo"]E a parada do this? Devo usar? Se sim, onde?
Renan, pode falar mano, tô aprendendo, qualquer informação é bem vinda =D
public Pessoa(String nome){
this.nome = nome;
}
public Pessoa(String nome){
setNome(nome);
}
Esses dois códigos são exatamente iguais.
Você pode fazer do jeito que achar melhor.
Murilo, sabe porque são iguais?
Ora, quando vc fez seu método setNome não foi:
public void setNome(String nome){
this.nome = nome;
}
Se vc colocar setNome(nome) no construtor, ele vai direto pra esse código acima, e vai dar no mesmo!
Resumindo, ele faria esse caminho:
1- Na classe Main, vc escreveu:
// Codigos...
Pessoa p = new Pessoa("Alfredo");
// Codigos...
Ou seja, vc fez uma nova referência a um objeto pessoa, chamado Alfredo.
2- Quando ele recebesse o "Alfredo" na classe main, ele ia pra classe pessoa:
public Pessoa(String nome){
setNome(nome);
}
Perceba que esse (nome) é o nome recebido pelo argumento! Ou seja, nome = "Alfredo".
3 - Quando o setNome(nome) receber esse argumento, ele vai pro método setNome:
public void setNome(String nome){
this.nome = nome;
}
Agora o argumento do método recebeu o valor do setNome lá do construtor, que também era chamado de nome e que recebeu o argumento "Alfredo" lá do main.
A partir desse ponto, sua variável 'nome' da sua classe 'Pessoa' deixa de ser null e passa a ser "Alfredo".
Sacou? Isso é orientação a objetos: fazer referências a diversos pontos do programa, e não colocando tudo em uma linha só.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="MathewsMotta"][...]
Obrigado!
era isso que eu queria explicar mas estava com preguiça,
toma com biscoito de presente!
[img]http://javafree.uol.com.br/files_user/files/9/74/9D/cookie1.jpg[/img]
GOSTEI 0
Douglas Eric
11/01/2012
Obrigado a vc. Adoro cookies :grin:
GOSTEI 0
Murilo Lopes
11/01/2012
KKKKKKKKKKK legal =D
Agora que eu entendi tudo que ta ai, meu programa já pergunta para o usuário o nome, telefone e o email. Agora só falta colocar isso na array? Eu terei que criar 3 array's? Uma para cada atributo?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]KKKKKKKKKKK legal =D
Agora que eu entendi tudo que ta ai, meu programa já pergunta para o usuário o nome, telefone e o email. Agora só falta colocar isso na array? Eu terei que criar 3 array's? Uma para cada atributo?
não!
seus atributos não estão todos dentro do seu objeto Pessoa?
você só precisa salvar as Pessoas! uma ArrayList só
GOSTEI 0
Renan Zimmer
11/01/2012
tem que criar o arraylist na agenda agora
GOSTEI 0
Murilo Lopes
11/01/2012
SEKK acho que resolvi o problema...
Na hora de criar a array eu tenho que colocar o "tipo" dela como a classe que construtor?
ArrayList<Pessoa> pessoas = new ArrayList();
//...
Pessoa objPessoa = new Pessoa(nome, telefone, email);
pessoas.add(objPessoa);
Posso ter me pronunciado errado(bem errado por sinal =D)
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]SEKK acho que resolvi o problema...
Na hora de criar a array eu tenho que colocar o "tipo" dela como a classe que construtor?
ArrayList<Pessoa> pessoas = new ArrayList();
//...
Pessoa objPessoa = new Pessoa(nome, telefone, email);
pessoas.add(objPessoa);
Posso ter me pronunciado errado(bem errado por sinal =D)
Nao sou o seek, maaaaaaaas... (nao sei se tu quer a minha ajuda, mas bora la)
Onde tu ta criando o arrayList de pessoas?
Por que tu nao muda o objPessoa para apenas pessoa? java é uma linguagem case sensitive.
Tu tem que criar o arrayList (a lista tratada) de pessoas no lugar apropriado. Sempre antes de criar algum codigo pense se está colocando o atributo ou método na classe certa.
GOSTEI 0
Murilo Lopes
11/01/2012
public class Main {
public static void main(String[] args) {
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
Scanner scanner = new Scanner(System.in);
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
}
}
Que isso mano, que isso? asuhasuhasuashsu
Claro que quero ajuda mano... =D
GOSTEI 0
Murilo Ângelo
11/01/2012
[quote="Murilo Lilo"]
public class Main {
public static void main(String[] args) {
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
Scanner scanner = new Scanner(System.in);
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
}
}
Que isso mano, que isso? asuhasuhasuashsu
Claro que quero ajuda mano... =D
Cara, como eu ja falei, sou meio radical com POO e MVC, pra mim o metodo main é APENAS o ponto de entrada e de saída do programa. Mas vou tentar deixar MVC pra mais além.
Ou seja, se eu estivesse te auxiliando nesse projeto, ia pedir pro metodo main ser apenas (vou dar um exemplo bem besta):
MenuIniciar m = new MenuIniciar();
m.iniciar();
EDIT: Só pra acrescentar, geralmente essa classe que se cria pra todar o programa, enquanto no MODELO (ler mais sobre MVC) chama-se classe Fachada.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]
public class Main {
public static void main(String[] args) {
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();
Scanner scanner = new Scanner(System.in);
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
}
}
Que isso mano, que isso? asuhasuhasuashsu
Claro que quero ajuda mano... =D
Não deixa de estar certo, mas leve em consideração o que nosso colega renanzimmer disse nos posts dele.
O projeto em si da agenda vai permitir que o usuário cadastre, veja, apague cadastros... certo?
então vamos dividir as coisas:
Primeiro e mais importante: A classe main deve servir APENAS para iniciar o programa, nada mais.
então considere fazer outra classe, uma chamada Agenda.
O main só vai criar um objeto agenda, e chamar o método que vai iniciar o programa (chamemos de menu() )
algo assim
public class Main {
public static void main(String[] args) {
Agenda agenda = new Agenda();
agenda.menu();
}
}
A sua classe agenda vai ter um atributo que vai ser o ArrayList de pessoas, e ela vai ter os métodos para montar o menu, fazer os cadastros, etc.
Tenha em mente dividir o programa, então para cada função, você vai criar um método diferente
public void cadastrar(){
//...
}
public void procurar(){
//...
}
public void excluir(){
//...
}
//etc...
GOSTEI 0
Murilo Lopes
11/01/2012
Mas para fazer isso eu teria quer ter o Scanner e a ArrayList na classe Pessoa? Por que pelo que vi hoje isso me custou 2,5 pontos na minha prova que eu tiraria 10 =D...
Fazendo desse seu jeito como ficaria o Scanner e a ArrayList? Entendendo que a classe Pessoa tem apenas atributos, get... e o construtor?
GOSTEI 0
Murilo Ângelo
11/01/2012
O interessante na criaçao de um arraylist, é primeiro criar apenas uma list como atributo e depois tratar no construtor para arraylist. Vai do genérico pro tratado.
GOSTEI 0
Murilo Lopes
11/01/2012
Renan, não entendi NADA do que tu disse...
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Renan, não entendi NADA do que tu disse...
nem eu XD
GOSTEI 0
Renan Zimmer
11/01/2012
wdjs;lahdjlas, é viadagem minha. Geralmente eu crio arrayList assim.
private List<Classe> nome da lista;
public Construtor(){
nome da lista=new ArrayList<Classe>();
}
GOSTEI 0
Murilo Lopes
11/01/2012
Agora já criei a classe Agenda e nela conterá os métodos Adicionar, Procurar, Listar Todos, Apagar e o menu. Sem esquecer do scanner e da array... tô fazendo o menu mais to me passando no while pra ficar repetindo o menu iai como faço?
public void menu(){
String opc = ("0");
while(opc != "5"){
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("5 - Sair");
System.out.println("==>");
String opc = scanner.nextLine();
}
@EDIT:
esqueci isso ai...
abafa...
GOSTEI 0
Murilo Ângelo
11/01/2012
[quote="Murilo Lilo"]Agora já criei a classe Agenda e nela conterá os métodos Adicionar, Procurar, Listar Todos, Apagar e o menu. Sem esquecer do scanner e da array... tô fazendo o menu mais to me passando no while pra ficar repetindo o menu iai como faço?
public void menu(){
String opc = ("0");
while(opc != "5"){
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("5 - Sair");
System.out.println("==>");
String opc = scanner.nextLine();
}
seguinte, nao precisa fazer um println pra mudar de linha, é só usar \n dentro do string que ja quebra a linha.
E o ideal pra fazer menuzinho é usar switch case (ler sobre switch case), e caso a resposta seja 1...
public void cadastrar(){
//logica aqui...
menu();
}
e assim por diante.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Agora já criei a classe Agenda e nela conterá os métodos Adicionar, Procurar, Listar Todos, Apagar e o menu. Sem esquecer do scanner e da array... tô fazendo o menu mais to me passando no while pra ficar repetindo o menu iai como faço?
public void menu(){
String opc = ("0");
while(opc != "5"){
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("5 - Sair");
System.out.println("==>");
String opc = scanner.nextLine();
}
não use String como operador, use um [color=blue]int[/color] ou um [color=blue]char[/color]
Essa comparação
não funciona, em Java, String é objeto, e objetos precisam ser comparados com o método equals
seria o certo.
Mas não use String, Scanner consegue ler inteiros, use o método nextInt()
Ah, e uma dica, deixe o "sair" ser a opção 0
depois quando você acabar, eu vou pedir pra você colocar mais opções, então se sair for o 5, vai dar problema :P
GOSTEI 0
Douglas Eric
11/01/2012
[quote="renanzimmer"]
seguinte, nao precisa fazer um println pra mudar de linha, é só usar \n dentro do string que ja quebra a linha.
Usar o println é melhor, porque ele vai usar o caracter nativo para dividir as linhas.
GOSTEI 0
Murilo Lopes
11/01/2012
Na classe Agenda eu vou ter que criar um objeto da classe pessoa? ou do construtor? eu preciso pegar os atributos que estão la certo? ou eu uso o extends?
@EDIT:
E o construtor, vai continuar com os três parâmetros?
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]Na classe Agenda eu vou ter que criar um objeto da classe pessoa? ou do construtor? eu preciso pegar os atributos que estão la certo? ou eu uso o extends?
@EDIT:
E o construtor, vai continuar com os três parâmetros?
extends é um caso particular de herança, vou te dar um exemplo muito pratico.
FUNCIONARIO extends PESSOA
FUNCIONARIO É UMA PESSOA no caso.
extends significa: SER UM.
Ou seja, Agenda extends Pessoa nao tem nexo.
Pra cadastrar no arrayList tu nao precisa pegar os atributos da pessoa, só a pessoa.
EDIT: A agenda nao vai influenciar na pessoa né, pense na pessoa como uma pessoa real, nao é pq quero cadastrar ela na minha agenda que vou modificar ela, e sim colocar ela(que ja está vindo com seus atributos) na lista.
Nao sei se fui claro...
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Na classe Agenda eu vou ter que criar um objeto da classe pessoa? ou do construtor? eu preciso pegar os atributos que estão la certo? ou eu uso o extends?
@EDIT:
E o construtor, vai continuar com os três parâmetros?
CALMA!
primeiro de tudo:
a sua classe Agenda só vai ter 2 atributos:
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
//..
}
no construtor da classe Agenda, você inicia a ArrayList e o Scanner.
Construtor da classe Agenda não precisa de parâmetros.
Agora você já tem a arraylist, só vai precisar criar objetos Pessoa, quando for cadastrar uma nova (ou seja, dentro do método cadastrar) e sim, vai usar o construtor de 3 parametros.
ESQUECE DE EXTENDS
você não vai usar herança nesse exercício.
GOSTEI 0
Murilo Lopes
11/01/2012
Ta dando um errinho cara. Uso o eclipse, ai ta aparecendo um triângulo amarelo com uma exclamação preta nas seguintes linhas:
public Agenda(){
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();//Aqui
Scanner scanner = new Scanner(System.in);//e aqui
}
Diz que a variável local não é usada ¬¬
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Ta dando um errinho cara. Uso o eclipse, ai ta aparecendo um triângulo amarelo com uma exclamação preta nas seguintes linhas:
public Agenda(){
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();//Aqui
Scanner scanner = new Scanner(System.in);//e aqui
}
Diz que a variável local não é usada ¬¬
primeiro de tudo, isso não é um erro, é um warning, um aviso.
segundo. você não precisa declarar a variável dentro do construtor, ela já foi declarada no inicio da classe (código que eu passei ali em cima)
muda para this
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();//Aqui
this.scanner = new Scanner(System.in);//e aqui
}
GOSTEI 0
Murilo Lopes
11/01/2012
Vei, ta funfando legal, to conseguido fazer com que apareça o menu e quando eu clico na opção 1(cadastrar) ele vai pra lá só que tá acontecendo algo...
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
}
Ele printa na tela as três primeiras linhas e já começa a scannear do telefone, ele ta pulando o nome, por que será?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Vei, ta funfando legal, to conseguido fazer com que apareça o menu e quando eu clico na opção 1(cadastrar) ele vai pra lá só que tá acontecendo algo...
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
}
Ele printa na tela as três primeiras linhas e já começa a scannear do telefone, ele ta pulando o nome, por que será?
não faço ideia... posta a classe Agenda inteira
GOSTEI 0
Murilo Lopes
11/01/2012
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public void listar(){
}
public void procurar(){
}
public void apagar(){
}
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();
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
menu();
}
public void sair(){
}
public void menu(){
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("==>");
int opc = scanner.nextInt();
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
apagar();
break;
case 0:
sair();
break;
default:
System.out.println("Opção inválida, tente novamente!");
menu();
}
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
GOSTEI 0
Renan Zimmer
11/01/2012
me parece certo... mas que eu lembro, Scanner é bugado... então... coloque um
logo antes do switch.
só isso, mais nada, deve resolver.
e está ficando muito bom, parabens pelo esforço! :D
GOSTEI 0
Murilo Lopes
11/01/2012
=D *-* ganhei meu dia *-*
GOSTEI 0
Kelvin Bianchi
11/01/2012
Também quero parabenizá-lo, pois são poucas as pessoas, que mesmo com pouco conhecimento corre atrás pra aprender! Você já está fera, e com um grande mérito, nada foi feito para você, você está fazendo totalmente sozinho, sendo autodidata, e isto é muito legal!
Mais uma vez parabéns pelo esforço!
GOSTEI 0
Murilo Lopes
11/01/2012
Sim, acho que consegui resolver o problema, coloquei isso:
String opc = scanner.nextLine();
No lugar disso:
int opc = scanner.nextInt();
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Sim, acho que consegui resolver o problema, coloquei isso:
String opc = scanner.nextLine();
No lugar disso:
int opc = scanner.nextInt();
não!!!
ja falei pra usar int no switch e no while.
Se for usar o nextLine para ler, pelo menos converta pra integer
int opc = Integer.parseInt(scanner.nextLine());
GOSTEI 0
Murilo Lopes
11/01/2012
Aguentei não cara, a lágrima desceu! *-*
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]Aguentei não cara, a lágrima desceu! *-*
Vai com calma aí! Estressa não que piora!
GOSTEI 0
Murilo Lopes
11/01/2012
Estressado não cara, tô feliz =D
SEKK consegui convertendo pra int =D
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]Estressado não cara, tô feliz =D
SEKK consegui convertendo pra int =D
Então parabéns!
GOSTEI 0
Murilo Lopes
11/01/2012
IIIIIIIIIIIIIIIIIIIHHHHHHHHHHHUUUUUUUULLLLLLLLLL
Agora já está listando xD
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]IIIIIIIIIIIIIIIIIIIHHHHHHHHHHHUUUUUUUULLLLLLLLLL
http://www.youtube.com/watch?v=IofpDsXq8Qg
GOSTEI 0
Murilo Lopes
11/01/2012
O que é isso?
GOSTEI 0
Murilo Lopes
11/01/2012
Não tem não template né? Fica feio mesmo na hora de mostrar a lista com os nomes cadastrados né?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]Não tem não template né? Fica feio mesmo na hora de mostrar a lista com os nomes cadastrados né?
huh???
depende... como você está mostrando?
da uma lida aqui:
http://javafree.uol.com.br/artigo/884104/Representacao-textual-de-objetos-metodo-toString.html
GOSTEI 0
Murilo Lopes
11/01/2012
Gente vou dormir por que não aguento mais pesquisar, e sem os especialistas que me auxiliam fica very hard. Depois irei "LIMPAR" o código onde der, mas até aqui o que vale é que ta funfando =D. Vou postar o meu progresso até então:
Pessoa.java :
package ListaPackage;
public class Pessoa {
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String nome;
private String telefone;
private String email;
public Pessoa(String nome, String telefone, String email) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
}
}
Main.java :
package ListaPackage;
public class Main {
public static void main(String[] args) {
Agenda agenda = new Agenda();
agenda.menu();
}
}
Agenda.java :
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public boolean existe(String nome){//Não acho que o erro esteja aqui
int i=0;
boolean tem = true;
for (Pessoa p: pessoas){
if (pessoas.contains(nome)){i++;}
}
if (i==0){tem = false;}
if (i>0){tem = true;}
return tem;
}
public void listar(){
//Funcionando legal aqui, e a parada do template que eu falei era pra ficar mais organizado
//quando listar os cadastros
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.getNome()+" "+p.getTelefone()+" "+p.getEmail());
System.out.println("===========================");
msgVoltar();
}
public void procurar(){//Depois que resolver o resto farei essa parte.
}
public void msgVoltar(){//Pra não ter que digitar isso um bocado de vez.
System.out.println("Tecle Enter para voltar!");
String opc = scanner.nextLine();
menu();
}
public void apagar(){//Aqui ta dando pau em algum lugar por que não apaga.
System.out.println("Digite o nome que deseja apagar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas)
pessoas.remove(p.getNome());
System.out.println("Cadastro apagado com sucesso!");
msgVoltar();
}
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(nome) == false){
//Antes de cadastrar verifica se o nome já existe para nao permitir um cadastro repetido.
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
menu();
}else{System.out.println("Nome já cadastrado, favor tente outro nome!");menu();}
msgVoltar();
}
public void sair(){//Falta fazer aqui ainda.
}
public void menu(){
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("==>");
int opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
apagar();
break;
case 0:
sair();
break;
default:
System.out.println("Opção inválida, tente novamente!");
menu();
}
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
Bem gente, é isso, desculpa qualquer erro infantil, pois é com eles que aprendo! Por favor, aceito tudo, comentários, críticas, ajudas, esculhambamentos... Enfim, toda e qualquer informação é bem vinda =D
GOSTEI 0
Murilo Ângelo
11/01/2012
Cara, você realmente, assim como eu, penso ser pessoas meio difíceis de se achar, "pouco" sei sobre java, estou recém no 1º ano do ensino médio com informática, mas já sei que sei "sei que sei :hauhau: " mais do que muitos alunos do 3º ano para cima, é muito legal ver alguém se esforçando a este ponto, só uma dúvida, a quanto tempo você começou a aprender java?
GOSTEI 0
Murilo Lopes
11/01/2012
Acabou que esse tópico virou um tutorial bem completinho das noções básicas de Java.
Até o nome do tópico sugere isso!
Voto por fix!
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]
Agenda.java :
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public boolean existe(String nome){//Não acho que o erro esteja aqui
int i=0;
boolean tem = true;
for (Pessoa p: pessoas){
if (pessoas.contains(nome)){i++;}
}
if (i==0){tem = false;}
if (i>0){tem = true;}
return tem;
}
public void listar(){
//Funcionando legal aqui, e a parada do template que eu falei era pra ficar mais organizado
//quando listar os cadastros
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.getNome()+" "+p.getTelefone()+" "+p.getEmail());
System.out.println("===========================");
msgVoltar();
}
public void procurar(){//Depois que resolver o resto farei essa parte.
}
public void msgVoltar(){//Pra não ter que digitar isso um bocado de vez.
System.out.println("Tecle Enter para voltar!");
String opc = scanner.nextLine();
menu();
}
public void apagar(){//Aqui ta dando pau em algum lugar por que não apaga.
System.out.println("Digite o nome que deseja apagar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas)
pessoas.remove(p.getNome());
System.out.println("Cadastro apagado com sucesso!");
msgVoltar();
}
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(nome) == false){
//Antes de cadastrar verifica se o nome já existe para nao permitir um cadastro repetido.
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
menu();
}else{System.out.println("Nome já cadastrado, favor tente outro nome!");menu();}
msgVoltar();
}
public void sair(){//Falta fazer aqui ainda.
}
public void menu(){
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("==>");
int opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
apagar();
break;
case 0:
sair();
break;
default:
System.out.println("Opção inválida, tente novamente!");
menu();
}
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
Bem gente, é isso, desculpa qualquer erro infantil, pois é com eles que aprendo! Por favor, aceito tudo, comentários, críticas, ajudas, esculhambamentos... Enfim, toda e qualquer informação é bem vinda =D
Cara, ta ficando muito bom mesmo, meus parabens!
Só algumas coisinhas pra te ajudar
No método apagar...
public void apagar(){//Aqui ta dando pau em algum lugar por que não apaga.
System.out.println("Digite o nome que deseja apagar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas)
pessoas.remove(p.getNome());
System.out.println("Cadastro apagado com sucesso!");
msgVoltar();
}
Bem veja, você pediu o nome para o usuário digitar, mas nunca usou ele.
o certo é você fazer uma comparação (dentro do for)
for (Pessoa p : pessoas)
if(p.getNome().equals(nome)){
pessoas.remove(p); //remove a pessoa, não o nome dela
break;
}
Outra coisa, fazer {<codigo>} não é legal, mesmo que seja uma instrução só, o melhor é identar as chaves
E uma ultima coisa que me deixou precupado no seu programa, seus métodos nunca retornam!
Isso é ruim, você vai colocar na pilha de chamadas mais e mais métodos que nunca vão terminar.
digamos que vá cadastrar 5 pessoas, ele va seguir essa lógica
menu() -- > cadastrar() --> msgVoltar() -->
(depois ele começa de novo, sem terminar o anterior)
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() --> menu()
Ou seja, no fim, você vai ter 16 métodos na pilha, quando na verdade vai usar apenas um, e os outros deviam ter terminado.
A lógica correta deveria ser
menu() -- > cadastrar() --> msgVoltar() -->
<---(return) <--- (return)<----
(volta para o primeiro menu() que foi chamado, não chama um novo)
Dentro do primeiro menu você faz um [color=blue]while[/color] para repetir enquanto o usuário não escolher 0
Mas essas chamadas para menu() indiscriminadas do seu código devem ser removidas. menu() só vai ser chamado uma vez na programa inteiro, na classe main
GOSTEI 0
Douglas Eric
11/01/2012
[quote="LeoCarmona"]Cara, você realmente, assim como eu, penso ser pessoas meio difíceis de se achar, "pouco" sei sobre java, estou recém no 1º ano do ensino médio com informática, mas já sei que sei "sei que sei :hauhau: " mais do que muitos alunos do 3º ano para cima, é muito legal ver alguém se esforçando a este ponto, só uma dúvida, a quanto tempo você começou a aprender java?
Faz uma semana ele está aqui no fórum se esforçando pra aprender do 0 sobre java e POO
[quote="MathewsMotta"]Acabou que esse tópico virou um tutorial bem completinho das noções básicas de Java.
Até o nome do tópico sugere isso!
Voto por fix!
O tópico ainda não acabou :D
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="sekkuar"]
E uma ultima coisa que me deixou precupado no seu programa, seus métodos nunca retornam!
Isso é ruim, você vai colocar na pilha de chamadas mais e mais métodos que nunca vão terminar.
digamos que vá cadastrar 5 pessoas, ele va seguir essa lógica
menu() -- > cadastrar() --> msgVoltar() -->
(depois ele começa de novo, sem terminar o anterior)
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() -->
menu() -- > cadastrar() --> msgVoltar() --> menu()
Ou seja, no fim, você vai ter 16 métodos na pilha, quando na verdade vai usar apenas um, e os outros deviam ter terminado.
A lógica correta deveria ser
menu() -- > cadastrar() --> msgVoltar() -->
<---(return) <--- (return)<----
(volta para o primeiro menu() que foi chamado, não chama um novo)
Dentro do primeiro menu você faz um [color=blue]while[/color] para repetir enquanto o usuário não escolher 0
Deixa eu tentar explicar isso aqui.
Murilo, fazer do jeito que vc fez não quer dizer que o programa não irá funcionar, mas deixará sua aplicação mais lenta por nada.
É claro que dificilmente um programa assim vai dar problema, mas imagine que vc está fazendo um software de cadastramento de pessoas em algum sistema(assim como sua agenda). Imagine centenas de usuários cadastrando ao mesmo tempo .
Eu simplesmente imagina sua própria agenda, ai uma secretária recebe do chefe dela uma lista de 750 pessoas para cadastrar nessa agenda. Se para cadastrar 5 foi gerada uma pilha de 16 métodos como sekkuar nos mostrou. A pilha nesse caso chegará à casa dos 2400 métodos!!
O que acontece é que seus métodos nunca terminam(não há valor de retorno). Por isso eles ficam na pilha.
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="MathewsMotta"]
O que acontece é que seus métodos nunca terminam(não há valor de retorno). Por isso eles ficam na pilha.
O problema não é não haver valor de retorno, o problema é que eles nunca chegam ao final mesmo.
O menu() sempre vai chamar uma função, e as funções sempre chamam um novo menu... e isso vai empilhando.
Todos os métodos vão ficar aberto enquanto o programa estiver funcionando e mais e mais serão chamados, até que o usuário decida sair em um dos menus, ai todos vão fechar em cascata até terminar o programa.
GOSTEI 0
Murilo Lopes
11/01/2012
LEO: É isso ai que o SEKK falou!
SEKK: Vou corrigir esses erros agora, jaja posto eles. Só que eu boto pra retornar o que?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]LEO: É isso ai que o SEKK falou!
SEKK: Vou corrigir esses erros agora, jaja posto eles. Só que eu boto pra retornar o que?
se os métodos não tiverem tipo (void), não precisa retornar nada.
Ou você pode chamar apenas
Mas não precisa, se ele chegar ao final do método, ele retorna sozinho.
GOSTEI 0
Murilo Lopes
11/01/2012
Eu não sei pra que serve isso:
[...]
.equals(nome)
[...]
Explica ai por favor.
@EDIT:
Você disse que meus métodos não retornam nada, como resolvo isso?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Eu não sei pra que serve isso:
Explica ai por favor.
já expliquei
http://javafree.uol.com.br/topic-884651-Desenvolvendo-meu-primeiro-projeto-em-JAVA.html?page=2#216669
GOSTEI 0
Murilo Lopes
11/01/2012
A desculpa ai, esqueci, lembrava de ter visto isso só que não sabia onde =D...
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="Murilo Lilo"]
Você disse que meus métodos não retornam nada, como resolvo isso?
Eu disse que seus métodos nunca retornam. *ponto*
Nunca retornar é ruim, você precisar deixar seu método terminar.
No seu programa, o seu método chama outro método que chama outro e que chama outro e vai chamando..
você precisa deixar seu método terminar, faz o que precisa e termina, não chama mais métodos.
Exemplo, seu método para mostrar mensagem, ele só precisa mostrar a mensagem e terminar, não chamar o menu()
todas essas chamadas de menu() devem ser retiradas.
sobre não retornar nada, isso não é um problema, se seu método não precisa retornar nada, então não retorne nada!
GOSTEI 0
Renan Zimmer
11/01/2012
Murilo,
Seus métodos estão chamando menu() de volta.
Não há necessidade, pois quando um método que foi chamado pelo menu termina ele continua no menu.
Pense num programa estruturado. Na linha 100, por exemplo, ele chama uma função qualquer. Quando ele chega nessa linha, ele irá para a função, fará a função, e quando a função terminar, ele continuará de onde ele parou, na linha 101.
No seu caso, ele chama um método pelo menu(). Fará o método, o método terminará, e então ele continuará o menu(). Se vc chamar o menu de novo, o primeiro ficará na pilha. E essa pilha só sumirá quando vc fechar o programa.
Entendeu?
GOSTEI 0
Renan Zimmer
11/01/2012
[quote="MathewsMotta"]
Pense num programa estruturado. Na linha 100, por exemplo, ele chama uma função qualquer. Quando ele chega nessa linha, ele irá para a função, fará a função, e quando a função terminar, ele continuará de onde ele parou, na linha 101.
Só uma correção, uma função retorna para a mesma linha a qual ela foi chamada.
Então se ela veio da linha 100, quando ela terminar, vai voltar pra linha 100.
GOSTEI 0
Murilo Lopes
11/01/2012
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public boolean existe(String nome){
int i=0;
boolean tem = true;
for (Pessoa p: pessoas){
if (p.getNome().equals(nome) == 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.getNome()+" "+p.getTelefone()+" "+p.getEmail());
System.out.println("===========================");
msgVoltar();
}
public void procurar(){
}
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(nome) == false){
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
System.out.println("Cadastro realizado com sucesso!");
msgVoltar();
}else{
System.out.println("Nome já cadastrado, favor tente outro nome!");
msgVoltar();
}
}
public void sair(){
}
public void menu(){
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("==>");
int opc = Integer.parseInt(scanner.nextLine());
while (opc != 0){
if (opc == 1){
cadastrar();
}
if (opc == 2){
procurar();
}
if (opc == 3){
listar();
}
if (opc == 4){
apagar();
}
menu();
}
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
Iai gente? Ainda consegui fazer funcionar o "Verificador" quase enlouqueço aqui mais saiu =D
GOSTEI 0
Murilo Ângelo
11/01/2012
Cheguei hoje e ja estou acompanhando aqui tbm..rsrs
GOSTEI 0
Douglas Eric
11/01/2012
Mas você ainda está chamando o menu no final do próprio menu!
e cade o switch que tava ali?
???
GOSTEI 0
Murilo Lopes
11/01/2012
Eita vei, pensei que tinha progredido =(, vê só deixa eu explicar o que eu fiz. Quando eu estudava Python o professor disse que essa era a melhor maneira de gerenciar o menu(pelo jeito só na estruturada mesmo).
Quando uso o while ele fica nesse loop até o cara digitar "0" pra sair, dessa maneira se ele digita "1" executa o cadastrar e faz o que tem que fazer, assim que termina se não tivesse o menu ali embaixo ele continuaria no loop do "1".
Ainda não vi como eu vou chamar tudo uma única vez! Da uma dica ai =D
GOSTEI 0
Mathews Motta
11/01/2012
[quote="sekkuar"]Só uma correção, uma função retorna para a mesma linha a qual ela foi chamada.
Então se ela veio da linha 100, quando ela terminar, vai voltar pra linha 100.
Sim sim, mas na verdade eu pensei naquela linha 100 tendo APENAS a função.
Mas se bem que se seguir exatamente o caminho, o programa iria chegar na linha 100, ler o comando de execução da função, ai ia pra função e qdo terminasse ia voltar exatamente onde parou: após a execução da função.
Ou seja, vai pular para a linha 101 pq a 100 acabou, mas se tiver mais algo na linha 100, ele continua da 100.
Se vc parar para pensar a própria lógica de execução usa lógica de programação:
*Função acaba de ser executada*
*Pensamento da máquina*
- Função finalizada
- Voltar para a linha onde parei
- Linha 100
SE (linhaAcabou) ENTÃO
pularLinha();
SENÃO
continuar();
Algo assim euhue
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Eita vei, pensei que tinha progredido =(, vê só deixa eu explicar o que eu fiz. Quando eu estudava Python o professor disse que essa era a melhor maneira de gerenciar o menu(pelo jeito só na estruturada mesmo).
Quando uso o while ele fica nesse loop até o cara digitar "0" pra sair, dessa maneira se ele digita "1" executa o cadastrar e faz o que tem que fazer, assim que termina se não tivesse o menu ali embaixo ele continuaria no loop do "1".
Ainda não vi como eu vou chamar tudo uma única vez! Da uma dica ai =D
do jeito que estava antes estava certo.
O while vai ficar "em volta" do menu inteiro, inclusive os print que desenham as opções.
Ao invez desse monte if, use a switch mesmo, e apaga essa chamada para menu, o laço precisa ficar dentro do próprio menu, não chamar um novo
GOSTEI 0
Murilo Lopes
11/01/2012
Cara, esse menu ta peidado viu, eu tenho que tirar esse While e deixar só o Switch mesmo? Mais ainda não entendi como eu vou conseguir chamar o menu uma única vez e ele se sustentar sozinho! Que tenso ta ficando... =(
GOSTEI 0
Kleber Bogo
11/01/2012
[quote="Murilo Lilo"]Cara, esse menu ta peidado viu, eu tenho que tirar esse While e deixar só o Switch mesmo? Mais ainda não entendi como eu vou conseguir chamar o menu uma única vez e ele se sustentar sozinho! Que tenso ta ficando... =(
não não não, o switch vai ficar dentro do while, assim
do{
//println do menu
//println do menu
//println do menu
//println do menu
//lê opção do usuário
switch(opc){
case 1: //caso 1
case 2: //caso 2
case 3: //caso 3
//...
}
}while(opc!=0);
entendeu?
GOSTEI 0
Murilo Lopes
11/01/2012
Ta dando um erro aqui nessa linha cara:
GOSTEI 0
Kleber Bogo
11/01/2012
[quote="Murilo Lilo"]Ta dando um erro aqui nessa linha cara:
qual erro?
posta a classe toda.
GOSTEI 0
Murilo Lopes
11/01/2012
É um warning:
opc cannot be resolved to a variable
GOSTEI 0
Kleber Bogo
11/01/2012
[quote="Murilo Lilo"]É um warning:
opc cannot be resolved to a variable
isso não é um warn, é um erro.
E, provavelmente quer dizer que você declarou a variavel no lugar errado
ou que você não declarou a variavel.
(cadê a classe?)
o lugar certo é antes do [color=blue]do[/color]
int opc = 0;
do{
//[...]
}while(opc != 0);
GOSTEI 0
Murilo Lopes
11/01/2012
Pronto problema resolvido =D volto mais tarde AFK xD
package ListaPackage;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
private Scanner scanner;
public boolean existe(String nome){
int i=0;
boolean tem = true;
for (Pessoa p: pessoas){
if (p.getNome().equals(nome) == 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.getNome()+" "+p.getTelefone()+" "+p.getEmail());
System.out.println("===========================");
msgVoltar();
}
public void procurar(){
}
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(nome) == false){
Pessoa pessoa = new Pessoa(nome, telefone, email);
pessoas.add(pessoa);
System.out.println("Cadastro realizado com sucesso!");
msgVoltar();
}else{
System.out.println("Nome já cadastrado, favor tente outro nome!");
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);
}
}
GOSTEI 0
Kleber Bogo
11/01/2012
Então agora só está faltando o procurar?
Isso aé!
uma dica pra ajudar no método de listar todos (e no procurar também)
Sobreescreva o método toString() na classe Pessoa.
http://javafree.uol.com.br/artigo/884104/Representacao-textual-de-objetos-metodo-toString.html
Assim você vai poder fazer só
sem ficar concatenando toda hora.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Olá,
Uma dica, no seu método "Existe", você pode parar o seu [color=blue]For[/color] quando encontrar um pessoa. Isto será importante quando você muitas pessoas na sua lista.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Como eu posso parar o FOR?
SEKK não entendi bem esse toString não cara, para deixar de escrever isso:
System.out.println(p.getNome()+" "+p.getTelefone()+" "+p.getEmail());
E só escrever isso:
?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Como eu posso parar o FOR?
SEKK não entendi bem esse toString não cara, para deixar de escrever isso:
System.out.println(p.getNome()+" "+p.getTelefone()+" "+p.getEmail());
E só escrever isso:
?
para parar um for (ou while, ou do-while ou switch) use a palavra chave [color=blue]break[/color]
O toString() é pra ficar mais fácil de imprimir, você sobreescreve o método na classe pessoa. Tente imprimir a variavel p e veja o que acontece, depois leia aquele link que eu passei.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Por isso que falei pow, eu li mas não entendi não.
Sobrescrever o método na classe pessoa, quer dizer que eu tenho que colocar o @over... na classe pessoa?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Por isso que falei pow, eu li mas não entendi não.
Sobrescrever o método na classe pessoa, quer dizer que eu tenho que colocar o @over... na classe pessoa?
@Override
public String toString(){
return getNome();
}
testa esse.depois muda getNome() pra outra coisa.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
@Override
public String toString(){
return getNome()+" "+getTelefone()+" "+getEmail();
}
Com isso na hora de listar só coloco p e aparece o que tá ai...
Sempre vai ser assim? Toda vez que eu colocar o p vai aparecer assim?
E só vai aparecer assim se eu colocar o p? Ou sempre quando eu quiser mostrar o conteúdo da ArrayList?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]
@Override
public String toString(){
return getNome()+" "+getTelefone()+" "+getEmail();
}
Com isso na hora de listar só coloco p e aparece o que tá ai...
Sempre vai ser assim? Toda vez que eu colocar o p vai aparecer assim?
E só vai aparecer assim se eu colocar o p? Ou sempre quando eu quiser mostrar o conteúdo da ArrayList?
[img]http://javafree.uol.com.br/files_user/files/2/45/CB/187892_150292941702933_7282436_n.jpg[/img][img]http://javafree.uol.com.br/files_user/files/2/3A/5D/REVOLVER%20CALIBRE%2038.jpg[/img]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Eita poxa.. =D
Não entendi também =(
GOSTEI 0
Murilo Lopes
11/01/2012
Cara, se realmente você começou em 1 semana...
[img]http://4.bp.blogspot.com/-4WiHtkBC4rE/Tc2q7fs6t-I/AAAAAAAAAWo/3y9Ao86X5Hk/s1600/Fuck_yeah_meme.jpg[/img]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Eita... vamos voltar ao trabalho, onde estávamos mesmo? Falta fazer o Procurar... posto já o código!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Bora partir para uma interface gráfica JOptionPane.
GOSTEI 0
Luciano
11/01/2012
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.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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();
}
GOSTEI 0
Luciano
11/01/2012
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.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
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);
}
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[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!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[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?
GOSTEI 0
Luciano
11/01/2012
[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)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
// não to sabendo o que fazer a partir daqui...
for (Pessoa te : temp){
Pessoa p = temp.get(index);
System.out.println(p);
p.setNome(nome);
break;
}
Tô perdido... =(
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
// não to sabendo o que fazer a partir daqui...
for (Pessoa te : temp){
Pessoa p = temp.get(index);
System.out.println(p);
p.setNome(nome);
break;
}
Tô perdido... =(
mas coloca aquele código que eu te falei, não precisa fazer outro for
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
// não to sabendo o que fazer a partir daqui...
Pessoa p = temp.get(index);
p.setTelefone("3322-1000");
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
AAAAA cara, saquei... xD
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
System.out.println("Digite o novo número de telefone.");
String tel = scanner.nextLine();
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setTelefone(tel);
p.setTelefone(mail);
msgVoltar();
}
O problema era que pra mim o SET só mostra alguma coisa... Mas agora eu me liguei que o set tem uma variável String como parâmetro, o que vai implicar na mudança do que ele estiver setando, caso algo seja passado para pelo como parâmetro certo? Saquei bem? xD
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]AAAAA cara, saquei... xD
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
System.out.println("Digite o novo número de telefone.");
String tel = scanner.nextLine();
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setTelefone(tel);
p.setTelefone(mail);
msgVoltar();
}
O problema era que pra mim o SET só mostra alguma coisa... Mas agora eu me liguei que o set tem uma variável String como parâmetro, o que vai implicar na mudança do que ele estiver setando, caso algo seja passado para pelo como parâmetro certo? Saquei bem? xD
Isso, você tinha confundido o set com o get
get = retorna valor
set = salva valor
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Mas assim... essa função de alterar, poderia ficar melhor.
O usuário devia poder escolher qual informação ele quer mudar
(o nome, telefone ou email)
não ser obrigado a mudar o telefone e o email ao mesmo tempo.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Tô fazendo isso agora pow, só postei desse jeito pra mostrar logo =D
GOSTEI 0
Luciano Cargnelutti
11/01/2012
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
p.setTelefone(tel);
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setEmail(mail);
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
}
Iai? O que mais posso fazer?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]
Iai? O que mais posso fazer?
[i]Bene[/i]!
Agora o proximo passo, é salvar os contatos em um txt
mas vou almoçar agora, depois explico melhor.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
Vou almoçar e assistir o jornal volto já também!
GOSTEI 0
Douglas Eric
11/01/2012
Voltei!
então, você vai pegar todas as Pessoas salvas na sua ArrayList e salvar em um arquivo pessoas.txt
Cada linha do arquivo vai ter as informações de uma Pessoa, separados por ponto-e-virgula ( ; )
um exemplo de um arquivo com Pessoas nele
Ronaldo;3333-4444;ronaldo@hotmail.com
Adriano;6666-7777;adriano_muito_loko@bol.com.br
Para gravar um arquivo .txt, você vai usar as classes File, FileWriter e BufferedWriter.
Aqui tem uma explicação:
http://javafree.uol.com.br/topic-881950-Gravar-e-Ler-dados-armazenados-em-TXT.html?page=1#199061
O seu programa vai salvar quando o usuário sair.
Ou seja, não vai ter uma opção "salvar"
quando o usuário escolher sair, ele vai salvar todas as pessoas cadastradas automaticamente antes de terminar o programa.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
E na hora que o programa for iniciado novamente ele vai carregar essas pessoas? Ou no momento só se trata de salvar?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]E na hora que o programa for iniciado novamente ele vai carregar essas pessoas? Ou no momento só se trata de salvar?
Sim sim, quando o programa iniciar ele vai carregar as pessoas do .txt,
se ele existir, ou iniciar com a lista vazia se não encontrar o arquivo.
Mas primeiro se concentre em salvar as pessoas. Não tem como você querer ler se não conseguiu salvar ainda.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
São esses os import's? Onde eu vou colocar(classe) isso? Ou terei que criar outra classe? Algo vai pro construtor?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
São esses os import's? Onde eu vou colocar(classe) isso? Ou terei que criar outra classe? Algo vai pro construtor?
Esses mesmo.
Pode criar uma outra classe... Chamada "Arquivo"
não vai nada no construtor, mas ela vai ter um método "salvar()" que recebe a ArrayList de pessoas como argumento.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedReader bw = new BufferedReader(fw); // Reader? não seria Writer?
String s = "String que vai ser salva no arquivo";
bw.write(s);
bw.flush();
//Mesma coisa, salva a String s no arquivo.
//Mas lembre, se você for salvar várias linhas, é bom adcionar bw.newLine() depois de salvar cada linha
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedReader bw = new BufferedReader(fw); // Reader? não seria Writer?
String s = "String que vai ser salva no arquivo";
bw.write(s);
bw.flush();
//Mesma coisa, salva a String s no arquivo.
//Mas lembre, se você for salvar várias linhas, é bom adcionar bw.newLine() depois de salvar cada linha
seria.
Mas eu passei aquele exemplo pra um noob que não queria aprender, então passei errado de propósito.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
A ta, no caso eu não sou noob(sou?) xD
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]A ta, no caso eu não sou noob(sou?) xD
Você ainda é noob, mas quer aprender, então já está em um nível completamente diferente dos outros noobs. (principalmente aquele que eu passei o exemplo)
Como pode ver, você percebeu o erro e conseguiu corrigir, aquele noob, *se* tentasse copiar o código (nem isso deve ter feito) iria reclamar que "deu erro" e pronto.
mas continue assim, está indo muito bem =D
GOSTEI 0
Luciano Cargnelutti
11/01/2012
package ListaPackage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
public class Arquivo {
public void salvar(ArrayList<Pessoa> Pessoa){
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write();
bw.flush();
}
}
Arquivo "Arquivo.java"
Até então tudo certo? O parâmetro é esse mesmo?
A linha:
Tem um erro dizendo que o parâmetro desse método é um INT como assim?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]
package ListaPackage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
public class Arquivo {
public void salvar(ArrayList<Pessoa> Pessoa){
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write();
bw.flush();
}
}
Arquivo "Arquivo.java"
Até então tudo certo? O parâmetro é esse mesmo?
A linha:
Tem um erro dizendo que o parâmetro desse método é um INT como assim?
bw.write() vai escrever "alguma coisa"
Esse alguma coisa pode ser: um int, um char, uma String ou uma matriz de char (char[] )
no seu código você não mandou ele escrever nada (sem parametros)
não existe um método write() para não escrever nada, você precisa passar alguma coisa nele.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
O parâmetro que eu teria que passar pro método salvar() é um ArrayList(Pessoa no caso)?
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
public class Arquivo {
public void salvar(ArrayList<Pessoa> Pessoa){
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(Pessoa);
bw.flush();
}
}
Aqui fica dizendo:
The method write(int) in the type BufferedWriter is not applicable for the arguments (ArrayList<Pessoa>)
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]O parâmetro que eu teria que passar pro método salvar() é um ArrayList(Pessoa no caso)?
Não. é uma String.
Para cada pessoa, vai salvar uma String, separando os valores por ponto-e-virgula (já não expliquei isso? :arrow: )
[quote="Murilo Lilo"]
Aqui fica dizendo:
The method write(int) in the type BufferedWriter is not applicable for the arguments (ArrayList<Pessoa> )
É porque não tem mesmo.
[quote="sekkuar"]
bw.write() vai escrever "alguma coisa"
Esse alguma coisa pode ser: um [b]int[/b], um [b]char[/b], uma [b]String[/b] ou uma matriz de char ([b]char[][/b] )
GOSTEI 0
Luciano
11/01/2012
Não espera. Você me confundiu!
O método salvar() vai receber a ArrayList<Pessoa>
O método write() vai receber uma String, você precisa fazer um for e chamar o método write várias vezes!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Algo assim:
package ListaPackage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Arquivo {
public void salvar(ArrayList<Pessoa> pessoas) throws IOException{
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail();
bw.write(salvando);
bw.flush();
}
}
}
?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Algo assim:
package ListaPackage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Arquivo {
public void salvar(ArrayList<Pessoa> pessoas) throws IOException{
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail();
bw.write(salvando);
bw.flush();
}
}
}
?
Posso ser muito chato mesmo, mas de uma forma que vai ser boa para o seu raciocínio?
Por que você não testa antes de perguntar?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Perguntar? O que? Olha cara, vou indo pra academia, volto logo, queimei muitos neurônios agora... Vou queimar um pouco de músculos pra ver se a cabeça volta a funfar bem, qualquer coisa deixa uma lista de questionamentos ai... volto logo, FUI.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Perguntar? O que? Olha cara, vou indo pra academia, volto logo, queimei muitos neurônios agora... Vou queimar um pouco de músculos pra ver se a cabeça volta a funfar bem, qualquer coisa deixa uma lista de questionamentos ai... volto logo, FUI.
você perguntou "Algo assim? "
por que não testa e descobre se funciona ou não?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Cara, fiz uma gambiarra por que não queria funfar de jeito nenhum! Vê só:
public class Arquivo {
public static void salvar(ArrayList<Pessoa> pessoas) throws IOException{
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail();
bw.write(salvando);
bw.flush();
}
}
}
public void cadastrar(){
String salvando;
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);
try {
Arquivo.salvar(pessoas);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
msgVoltar();
}else{
System.out.println("Número já cadastrado, favor tente outro número!");
msgVoltar();
}
}
Tenho certeza que não é nada do que você esperava, mas foi isso que eu consegui, e aqui funcionou, o arquivo que foi gerado só não colocou uma pessoa abaixo da outra!
GOSTEI 0
Douglas Eric
11/01/2012
para colocar um em cada linha, use um
antes do flush() (expliquei isso naquele tópico)
e... eu não achei a tal gambiarra que você falou, o unico problema é que você não está salvando no lugar certo.
Era pra ele salvar quando o programa terminasse (usuário escolheu sair)
Não para gerar um novo arquivo a cada cadastro (e as alterações/exclusões ficam como?)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto, problemas resolvidos! Agora fazer o programa ao ser iniciado ler esse arquivo certo?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Pronto, problemas resolvidos! Agora fazer o programa ao ser iniciado ler esse arquivo certo?
Sim, primeiro verifica se o arquivo existe, se existir, carrega todas as pessoas dele para a ArrayList de pessoas
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Ta difícil cara, detalha ou da uma ajudinha ai.
public static void ler(){
try {
FileReader fr = new FileReader("arquivo.txt");
BufferedReader br = new BufferedReader(fr);
} catch (Exception e) {
e.printStackTrace();
}
}
O que eu produzi até então!
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Ta difícil cara, detalha ou da uma ajudinha ai.
public static void ler(){
try {
FileReader fr = new FileReader("arquivo.txt");
BufferedReader br = new BufferedReader(fr);
} catch (Exception e) {
e.printStackTrace();
}
}
O que eu produzi até então!
porque não criou um new File("arquivo.txt") ?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Tenso vei, só tentei ajudar e levei uma pedrada, num ajudo mais!
SEKK me ajuda aqui, tô tentando decifrar:
[quote="sekkuar"]Sim, primeiro verifica se o arquivo existe, se existir, carrega todas as pessoas dele para a ArrayList de pessoas
Já verifiquei, como carrego o que ta no arquivo para a ArrayList? Assim que eu iniciar o programa esse método tem que ser iniciado?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Tenso vei, só tentei ajudar e levei uma pedrada, num ajudo mais!
Acho que ele não queria dar uma pedrada, mas tipo, liga não tem muita gente assim (super noob) nesse fórum, mas também tem muita gente legal!
continue ajudando sim, quando você ajudar alguém que ficar muito feliz pela sua ajuda, você vai se sentir muito bem por ter ajudado alguém!
[quote="Murilo Lilo"]
SEKK me ajuda aqui, tô tentando decifrar:
[quote="sekkuar"]Sim, primeiro verifica se o arquivo existe, se existir, carrega todas as pessoas dele para a ArrayList de pessoas
Já verifiquei, como carrego o que ta no arquivo para a ArrayList? Assim que eu iniciar o programa esse método tem que ser iniciado?
Seu arquivo tem N linhas, que representam N pessoas.
Cada linha (pessoa) tem 3 Strings, separadas por ";"
Para ler cada linha, você faz assim
String s = br.readLine();
while(s!=null){
//faz alguma coisa com a String
//...
s = br.readLine(); //lê a próxima linha
}
Agora, você leu uma linha
"Ronaldo;3333-4444;ronaldo@hotmail.com"
para separar ela, você usa o método split,
split vai dividir uma String, usando uma String menor como separador, nesse caso ";"
então
String[] dados = s.split(";");
com aquela String, ele vai gerar a matriz equivalente a
String[] dados = {"Ronaldo","3333-4444","ronaldo@hotmail.com"};
tendo essas três String, você pode criar um novo objeto Pessoa com os dados, e adicionar à sua ArrayList.
Lembra a sua classe Arquivo?
agora você vai criar um método carregar() que vai receber a mesma matriz, mas dessa vez ela vai entrar vazia e sair preenchida.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"]você pode criar um novo objeto Pessoa com os dados, e adicionar à sua ArrayList.
Lembra a sua classe Arquivo?
agora você vai criar um método carregar() que vai receber a mesma matriz, mas dessa vez ela vai entrar vazia e sair preenchida.
Vê se eu entendi bem, dai pra cima eu entendi bem, agora o que ta ai... Vamos lá, eu vou criar um método, carregar(), que vai pegar essa String dados(que contem as três String's) vai coloca-lá na ArrayList? Esse novo objeto que criarei vai ficar no método carregar ou ler()(é esse que estamos trabalhando)? A matriz vei entrar no método vazia e vai sair preenchida? Libera mais um detalhe ai!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
public void carregar(ArrayList<Pessoa> pessoas){
//verifica o arquivo, e carrega ele, fr, br
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine(); //lê a próxima linha
}
}
não esqueça das exceções.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto, agora senti firmeza =D!
Só não entendi o método carregar...
public static void ler(ArrayList<Pessoa> pessoas){
try {
File file = new File("arquivo.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Pronto, agora senti firmeza =D!
Só não entendi o método carregar...
public static void ler(ArrayList<Pessoa> pessoas){
try {
File file = new File("arquivo.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
carregar ou ler, é a mesma coisa, só escrevemos com nomes diferentes.
Mas, cade a verificação de se o arquivo existe?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
try {
File file = new File("arquivo.txt");
if (! file.exists()){
System.out.println("Digite o nome que deseja apagar:");
}else{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine();
}
}
Isso?
GOSTEI 0
Douglas Eric
11/01/2012
quase... mas, pra que "nome que deseja apagar"?
se o arquivo não existir, você só termina sem fazer nada
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Foi um controlC que dei só pra ver se o negocio funfava mesmo =D.
Essa parada do exists() eu procurei na net vei, vale? Por que eu não ia conseguir adivinhar isso ta ligado? Tô fazendo certo em procurar? Ou tenho que desenrolar só?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Foi um controlC que dei só pra ver se o negocio funfava mesmo =D.
Essa parada do exists() eu procurei na net vei, vale? Por que eu não ia conseguir adivinhar isso ta ligado? Tô fazendo certo em procurar? Ou tenho que desenrolar só?
Obvio que está certo!
é por isso mesmo que eu não passo nada pronto, procurando você aprende mais, está certíssimo!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
E agora chefe? Qual a próxima bronca?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]E agora chefe? Qual a próxima bronca?
num sei... Vamos ver como está.
Posta todas as classes
[size=4]chefe? até agora de pouco eu era professor, agora sou chefe?
Não vai querer cobrar salário neh???[/size]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Quase 200 post tem o tópico, quase 1500 visualizações, será que isso vai servir pra alguem?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
BEM GENTE, AQUI POSTO MEU TRABALHO. ERA PRA TER SAÍDO EM DOIS DIAS MAIS EM CINCO FIZ ESSA MARAVILHA(PELO MENOS PRA MIM) AI. ESPERO QUE COM ISSO ALGUÉM APRENDA UM POUCO TAMBÉM!
Main.java
package ListaPackage;
public class Main {
public static void main(String[] args) {
Agenda agenda = new Agenda();
agenda.menu();
}
}
Pessoa.java
package ListaPackage;
public class Pessoa {
private String nome;
private String telefone;
private String email;
@Override
public String toString(){
return getNome()+" "+getTelefone()+" "+getEmail();
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Pessoa(String nome, String telefone, String email) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
}
}
Agenda.java
package ListaPackage;
import java.io.IOException;
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 alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
p.setTelefone(tel);
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setEmail(mail);
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
}
public void msgVoltar(){
String opc;
System.out.println("Tecle Enter para voltar!");
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);
msgVoltar();
}else{
System.out.println("Número já cadastrado, favor tente outro número!");
msgVoltar();
}
}
public void menu(){
int opc;
Arquivo.ler(pessoas);
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 - Alterar");
System.out.println("5 - 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:
alterar();
break;
case 5:
apagar();
break;
case 0:
try {
Arquivo.salvar(pessoas);
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}while(opc != 0);
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
Arquivo.java
package ListaPackage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Arquivo {
public static void salvar(ArrayList<Pessoa> pessoas) throws IOException{
File file = new File("arquivo.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail();
bw.write(salvando);
bw.newLine();
bw.flush();
}
}
public static void ler(ArrayList<Pessoa> pessoas){
try {
File file = new File("arquivo.txt");
if (file.exists()){
return;
}else{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
GOSTEI 0
Luciano
11/01/2012
Por que ler() trata as exceções, e gravar() não?
os dois deveriam tratar as exceções.
e, sabe essa linha?
p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail()
você podia fazer um método na classe Pessoa que retornasse uma String nesse formato já.
algo como getLinha()
agora, tem uma coisa que me deixou triste!
} catch (Exception e) {
e.printStackTrace();
}
Isso não se faz!
Use a Exceção certa, não só Exception
se for mais de uma Exceção, faça mais de um catch!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Tem umas coisas que foi o eclipse que fez e eu não entendi bem!
No método salvar tem isso:
que no ler() não tem, tem algo haver?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Tem umas coisas que foi o eclipse que fez e eu não entendi bem!
No método salvar tem isso:
que no ler() não tem, tem algo haver?
no ler() você colocou os try-catch
no gravar() não.
apaga essa parte do gravar, e coloque s try-catch
depois apague o try-catch no menu
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto, pelo que eu lembro existe 3 tipos de exceções, eu devo saber qual em qual ocasião deverei usar? Ou em uma ocasião terei que colocar mais de uma?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Pronto, pelo que eu lembro existe 3 tipos de exceções, eu devo saber qual em qual ocasião deverei usar? Ou em uma ocasião terei que colocar mais de uma?
três tipos de exceções...? :arrow:
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Lá no 5.9.1
http://javafree.uol.com.br/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.html
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Lá no 5.9.1
http://javafree.uol.com.br/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.html
vish... isso está, no mínimo, imcompleto.
http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html
Veja, "direct known subclasses", são todas as exceções que herdam direto de Exception, cada uma tem mais subclasses... exemplo, RuntimeException
http://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html
GOSTEI 0
Luciano Cargnelutti
11/01/2012
E na minha classe? Quais exceções eu coloco? O que eu vi de exceção me permitiu esse erro! Mais vejamos, quando estamos digitando um código de um futuro sistema, nós fazemos com que ele não tenha erros, mas diante do usuário é outra história, o mesmo pode fazer alguma alteração de arquivo ou pasta ou alguma coisa desgraça que ele venha a fazer, essas exceções são um meio de tentar resolver um problema que um usuário venha a cometer, como pro exemplo meu método ler(), ele verifica se o arquivo existe, caso contrário ele vai pra exceção que vai nos mostrar o que aconteceu? Ta correto esse meu raciocínio?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]E na minha classe? Quais exceções eu coloco? O que eu vi de exceção me permitiu esse erro! Mais vejamos, quando estamos digitando um código de um futuro sistema, nós fazemos com que ele não tenha erros, mas diante do usuário é outra história, o mesmo pode fazer alguma alteração de arquivo ou pasta ou alguma coisa desgraça que ele venha a fazer, essas exceções são um meio de tentar resolver um problema que um usuário venha a cometer, como pro exemplo meu método ler(), ele verifica se o arquivo existe, caso contrário ele vai pra exceção que vai nos mostrar o que aconteceu? Ta correto esse meu raciocínio?
Sim.
e no seu caso, é uma IOException
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Então aqui:
Já ta errado? Seria:
?
@EDIT:
Gostaria também de saber como eu devo ter essas exceções na cabeça, tipo como saberei que nesse tipo de ocasião é pra usar a IO? E se for outro caso? Esse assunto deve ser mais visto ou deve receber uma atenção maior futuramente ou desde já? Isso é uma coisa que a pessoa tem que aprender já ou não tem jeito, só com o tempo e prática?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Então aqui:
Já ta errado? Seria:
?
@EDIT:
Gostaria também de saber como eu devo ter essas exceções na cabeça, tipo como saberei que nesse tipo de ocasião é pra usar a IO? E se for outro caso? Esse assunto deve ser mais visto ou deve receber uma atenção maior futuramente ou desde já? Isso é uma coisa que a pessoa tem que aprender já ou não tem jeito, só com o tempo e prática?
E isso mesmo, e, pra você aprender, precisa ver a documentação.
No caso, a documentação de bufferedReader
O método readLine() lança IOException
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
Essa IOException precisa ser capturada (catch)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
E agora? Colocar os dados num banco de dados? Ou criar uma interface gráfica? Ou adicionar mais funcionalidades?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]E agora? Colocar os dados num banco de dados? Ou criar uma interface gráfica? Ou adicionar mais funcionalidades?
calma!
primeiro vejamos o que você já fez
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Arquivo.java :
package ListaPackage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Arquivo {
public static void salvar(ArrayList<Pessoa> pessoas) {
try {
File file = new File("arquivo.txt");
if (file.exists()){
return;
}else{
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome()+";"+ p.getTelefone()+";"+ p.getEmail();
bw.write(salvando);
bw.newLine();
bw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ler(ArrayList<Pessoa> pessoas){
try {
File file = new File("arquivo.txt");
if (file.exists()){
return;
}else{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0],dados[1],dados[2]);
pessoas.add(p);
s = br.readLine();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Pessoa.java :
package ListaPackage;
public class Pessoa {
private String nome;
private String telefone;
private String email;
@Override
public String toString(){
return getNome()+" "+getTelefone()+" "+getEmail();
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Pessoa(String nome, String telefone, String email) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
}
}
Agenda.java :
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 alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
p.setTelefone(tel);
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setEmail(mail);
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
}
public void msgVoltar(){
String opc;
System.out.println("Tecle Enter para voltar!");
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);
msgVoltar();
}else{
System.out.println("Número já cadastrado, favor tente outro número!");
msgVoltar();
}
}
public void menu(){
int opc;
Arquivo.ler(pessoas);
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 - Alterar");
System.out.println("5 - 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:
alterar();
break;
case 5:
apagar();
break;
case 0:
Arquivo.salvar(pessoas);
break;
}
}while(opc != 0);
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
O Main nem precisa né? =D
Diga ai mais o que posso ajeitar aqui!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Tem um errinho já de cara. Não sei se você testou o seu código mas, se você tiver salvo o arquivo com as pessoas, apaga ele e tenta iniciar o programa.
Ve o que acontece.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Problema resolvido =D
Esqueci que colocar a exclamação!
Qual o próximo?
GOSTEI 0
Douglas Eric
11/01/2012
Mais umas coisinhas:
quando você escolhe "procurar" ele diz "digite o nome que você quer [b]apagar[/b]"
O programa permite você cadastrar e alterar as pessoas com o mesmo nome, mas quando você manda apagar, ele vai apagar o primeiro registro com aquele nome. O melhor seria perguntar qual registro ia ser apagado, certo? (igual o "alterar" faz)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Esses erros de escritas é por que eu tava fazendo e dava CTRL+C e CTRL+V ai acabei esquecendo de alterar!
É mesmo, tem razão(sempre tem =D) vou fazer isso agora no método apagar!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
A segunda vez que você roda o programa (ou seja, depois que ele criou o arquivo com os registros da primeira vez) ele não salva mais.
Ele só está guardando os registros salvos da primeira vez que você executou, pode alterar, apagar ou incluir registros, as alterações não serão salvas nas proximas vezes.
GOSTEI 0
Luciano
11/01/2012
Também seria bom se seu [color=blue]switch[/color] tivesse uma opção [color=blue]default[/color] para indicar uma opção inválida, e também um tratamento para caso o usuário digitar alguma coisa que não seja número no menu (atualmente, se ele fizer isso, o programa fecha)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Oush vei, é mesmo oia, por que em?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Oush vei, é mesmo oia, por que em?
O problema está no método Arquivo.salvar()
vai seguindo os comandos dele que você descobre o problema.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
o default do switch eu tô ligado, mas como eu farei esse tratamento?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]o default do switch eu tô ligado, mas como eu farei esse tratamento?
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto...
public void menu(){
int opc;
Arquivo.ler(pessoas);
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 - Alterar");
System.out.println("5 - Apagar");
System.out.println("0 - Sair");
System.out.println("==>");
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
alterar();
break;
case 5:
apagar();
break;
case 0:
Arquivo.salvar(pessoas);
break;
default:
System.out.println("Opção inválida, digite apenas números!");
}
}while(opc != 0);
}
Assim em todos os outros métodos que pedem isso certo?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]
Assim em todos os outros métodos que pedem isso certo?
certo.
Mas ia ser bom chamar o msgVoltar() para ter certeza que o usuário leu a mensagem de opção inválida.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Feito
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Feito
Conseguiu arrumar o método salvar?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Cara vei, mais que raiva... Que merda... Se eu não tivesse namorada eu não tava desse jeito! ¬¬
Resolvi sim o problema do salvar!
Man vou tomar um banho e volto já pra continuar o trabalho! 10 minutos!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Murilo, tente perceber o que houve aqui.
Você já estava tentando partir para o próximo passo, mas nem testou o que você já tinha feito!
Erros SEMPRE existirão. Quando chegar em um estado sólido do programa, sempre teste. Porque se um errinho ficou e vc seguiu em frente esse erro pode virar uma bola de neve e vai ser muito pior de consertar depois!!!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Cara vei, mais que raiva... Que merda... Se eu não tivesse namorada eu não tava desse jeito! ¬¬
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
:arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow: :arrow:
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto... Tive que levar minha tia no médico ¬¬
Continuando...
GOSTEI 0
Murilo Ângelo
11/01/2012
[quote="sekkuar"][quote="Murilo Lilo"]o default do switch eu tô ligado, mas como eu farei esse tratamento?
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
[color=blue]Exception[/color]?
não seria melhor tratar apenas a [color=blue]NumberFormatException[/color]?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="simu"][quote="sekkuar"][quote="Murilo Lilo"]o default do switch eu tô ligado, mas como eu farei esse tratamento?
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
[color=blue]Exception[/color]?
não seria melhor tratar apenas a [color=blue]NumberFormatException[/color]?
Eu pensei nisso, mas, pensando bem, você só está lendo a entrada do usuário, qualquer exception ia acabar estragando o programa nesse ponto.
pra não complicar, só pegar qualquer Exception e jogar como entrada inválida seria mais fácil, e não ia trazer nenhuma consequência à execução do programa...
GOSTEI 0
Luciano
11/01/2012
[quote="simu"][quote="sekkuar"][quote="Murilo Lilo"]o default do switch eu tô ligado, mas como eu farei esse tratamento?
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
[color=blue]Exception[/color]?
não seria melhor tratar apenas a [color=blue]NumberFormatException[/color]?
Simu, ele ta fazendo o Murilo perceber essas coisas...
GOSTEI 0
Douglas Eric
11/01/2012
[quote="MathewsMotta"][quote="simu"][quote="sekkuar"][quote="Murilo Lilo"]o default do switch eu tô ligado, mas como eu farei esse tratamento?
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) { //se o usuário digitar besteira, lança exception;
opc = -1; //-1 vai cair no default, ou opção inválida
}
[color=blue]Exception[/color]?
não seria melhor tratar apenas a [color=blue]NumberFormatException[/color]?
Simu, ele ta fazendo o Murilo perceber essas coisas...
não nesse caso XD
GOSTEI 0
Luciano
11/01/2012
Bom, então nesse caso seria melhor vc explicar porque usou Exception, não?
Porque la atras ele usou exception e vc falou pra usar algo específico, e agora vc veio e botou exception a cabeça dele vai explodir!
GOSTEI 0
Luciano
11/01/2012
[quote="MathewsMotta"]Bom, então nesse caso seria melhor vc explicar porque usou Exception, não?
Porque la atras ele usou exception e vc falou pra usar algo específico, e agora vc veio e botou exception a cabeça dele vai explodir!
[img]http://javafree.uol.com.br/files_user/files/7/5B/9A/OkayGuy.jpg[/img]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Cara eu acho que querendo ou não tem coisas que eu não vou pegar assim fácil fácil... As vezes me sinto como cego em tiroteio... Mas tamo na luta =D
GOSTEI 0
Mathews Motta
11/01/2012
Veja bem.
Apesar do fato de vc já saber outras linguagens e já saber lógica de programação, não muda o também fato de que você está imerso em um mundo novo. O Mundo Java.
É claro que é normal se sentir perdido. Imagine só: aposto que que você sabe tudo da sua cidade, ou ao menos, da região que você mora, certo? Você anda pela rua com determinação e certeza de onde você está andando. Isso porque você já estava imerso nesse mundo, você já o conhecia.
Agora, imagine a mesma situação, mas em vez de ser sua cidade, você está no centro de Tóquio, você não vai andar com a certeza que você andava!!! Mas, ambas são cidades, a diferença é que uma delas você [b]não conhece[/b]!
O processo de conhecer um mundo novo é delicado e exige paciência.
Mas é exatamente aí que está a diferença entre você e um cego no tiroteio. O cego no tiroteio ficará perdido e nunca vai saber direito para onde ir(São os nossos "queridos" fazpramim), você, que é mais determinado, não está cego. Está apenas escuro. Com o tempo você começa a enxergar de novo, coisa que nenhum cego conseguiria!
Eu te entendo. Estava em situação semelhante a alguns meses atrás. Mas é um barato a hora quando todas as peças de informações que você já viu, embaralhadas na sua cabeça, começam a se encaixar. Quando tudo começar a ficar claro na sua cabeça, vai vir junto com uma auto satisfação muito grande, por estar correndo atrás sozinho de uma coisa que muitos não aprendem nem com professorzinho.
E é aqui que chegamos a um post meu que eu ja falei para você: parabéns, apenas por ser dedicado.
Bom mesmo é aquele que sempre corre atrás do aprendizado.
GOSTEI 0
Luciano
11/01/2012
[quote="MathewsMotta"]
É claro que é normal se sentir perdido. Imagine só: aposto que que você sabe tudo da sua cidade, ou ao menos, da região que você mora, certo? Você anda pela rua com determinação e certeza de onde você está andando. Isso porque você já estava imerso nesse mundo, você já o conhecia.
Agora, imagine a mesma situação, mas em vez de ser sua cidade, você está no centro de Tóquio, você não vai andar com a certeza que você andava!!! Mas, ambas são cidades, a diferença é que uma delas você [b]não conhece[/b]!
Eu me perco no meu próprio bairro, só conheço a minha rua e olhe lá
"Hey, você sabe me informar onde fica a rua ernestina vieira?"
[img]http://javafree.uol.com.br/files_user/files/2/45/CB/187892_150292941702933_7282436_n.jpg[/img]
"Claro que sei, segue e vira a terceira a direita"
GOSTEI 0
Luciano Cargnelutti
11/01/2012
kkkkkkkkkkkkkkkk viajem da poxa =D
Belo de um sermão Mathews, gostei =D, só tô achando que esse tópico tem mas funcionalidades que meu projeto xD...
Indo pra academia, na volta continuaremos...
GOSTEI 0
Mathews Motta
11/01/2012
[quote="sekkuar"][quote="MathewsMotta"]
É claro que é normal se sentir perdido. Imagine só: aposto que que você sabe tudo da sua cidade, ou ao menos, da região que você mora, certo? Você anda pela rua com determinação e certeza de onde você está andando. Isso porque você já estava imerso nesse mundo, você já o conhecia.
Agora, imagine a mesma situação, mas em vez de ser sua cidade, você está no centro de Tóquio, você não vai andar com a certeza que você andava!!! Mas, ambas são cidades, a diferença é que uma delas você [b]não conhece[/b]!
Eu me perco no meu próprio bairro, só conheço a minha rua e olhe lá
"Hey, você sabe me informar onde fica a rua ernestina vieira?"
"Claro que sei, segue e vira a terceira a direita"
Pior q eu sou bem assim também... Eu não sei nem o nome de algumas ruas vizinhas da minha ;X
O mais engraçado é que vou fazer prova dia 31/01 pra tirar carteira de motorista. Imaginem a cena =X
(Quando me perguntam onde fica tal rua e eu nao sei responder eu finjo um sotaque de paulista e falo que não conheço a região!)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Iai seekuar? Onde estavamos?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Iai seekuar? Onde estavamos?
num sei.
arrumou aquelas treta do programa?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Não tô conseguindo fazer o apagar vei... se liga:
public void apagar(){
int cont = 0;
int index;
ArrayList<Pessoa> apag = new ArrayList<Pessoa>();
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(cont+"=> "+p);
cont++;
apag.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja apagar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = apag.get(index);
System.out.println("Cadastro apagado com sucesso!");
msgVoltar();
}
O que está acontecendo aqui é o seguinte, eu to fazendo a mesma parada do método alterar(), só que chega uma hora que eu não sei o que fazer cara, como eu vou apagar?
GOSTEI 0
Luciano
11/01/2012
index = Integer.parseInt(scanner.nextLine());
Pessoa p = apag.get(index);
pessoas.remove(p);
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Por que pessoas.remove(p)?
Não poderia não ser p.remove...?
@EDIT:
Pronto, acho que todos esses errinhos já foram resolvidos!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Por que pessoas.remove(p)?
Não poderia não ser p.remove...?
@EDIT:
Pronto, acho que todos esses errinhos já foram resolvidos!
Não, pessoas é a lista, p é a pessoa a ser apagada
isto é: remova a Pessoa "p" da lista "pessoas"
GOSTEI 0
Luciano Cargnelutti
11/01/2012
AAA entedi xD, sekkuar vamos traçar metas de desenvolvimento pro dia de hoje?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]AAA entedi xD, sekkuar vamos traçar metas de desenvolvimento pro dia de hoje?
Certo
eu pensei em uma ideia bacana, mas você vai precisar pensar mais em lógica do que em java em si.
Imagine que, ao invez de deixar cadastrar várias pessoas com o mesmo nome, seria melhor deixar a mesma pessoa cadastrar vários telefones e emails diferentes, no mesmo objeto pessoa.
Como você resolveria esse problema?
(lembre que você ainda vai ter que salvar as pessoas no arquivo de texto)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
É uma baita de uma ideia, mas bem complexa(pra mim pelo menos). Vamos as possíveis resoluções...
O objeto Pessoa recebe três parâmetros(nome, telefone, email), para que uma pessoa possa ter vários telefones e emails, acho eu, que seria necessário que telefone e email fossem também uma ArrayList. Só que me vem uma dúvida, a quantidade de números e emails que ai poderia conter, já que pelo que eu sei ArrayList não tem tamanho. Logo minha primeira resolução seria:
O objeto Pessoa receberia o nome, e uma ArrayList Telefone(que a principio teria como ser armazenados 4 números) e uma ArrayList Email(o mesmo do anterior). E se por algum acaso a pessoa não preenchesse os quatro números e/ou emails os mesmos seriam preenchidos automaticamente com uma String vazia ou 0000-0000 ou qualquer outra coisa que informasse que ainda tinha aquele espaço livre.
Seria assim?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]É uma baita de uma ideia, mas bem complexa(pra mim pelo menos). Vamos as possíveis resoluções...
O objeto Pessoa recebe três parâmetros(nome, telefone, email), para que uma pessoa possa ter vários telefones e emails, acho eu, que seria necessário que telefone e email fossem também uma ArrayList. Só que me vem uma dúvida, a quantidade de números e emails que ai poderia conter, já que pelo que eu sei ArrayList não tem tamanho.
Exato!
Se você precisa de um tamanho variável de informações do mesmo tipo (varios telefones ou varios emails) você troca o atributo por uma ArrayList
ArrayList não tem tamanho fixo, nem para mínimo nem para máximo, ela pode ter nenhum item ou itens (virtualmente) infinitos.
[quote="Murilo Lilo"]
Logo minha primeira resolução seria:
O objeto Pessoa receberia o nome, e uma ArrayList Telefone(que a principio teria como ser armazenados 4 números) e uma ArrayList Email(o mesmo do anterior). E se por algum acaso a pessoa não preenchesse os quatro números e/ou emails os mesmos seriam preenchidos automaticamente com uma String vazia ou 0000-0000 ou qualquer outra coisa que informasse que ainda tinha aquele espaço livre.
Seria assim?
Quase.
A ArrayList não tem tamanho definido (note que nos mesmos posts eu só disse que tem "vários" mas não defini nenhum número)
Uma Pessoa pode ter 50 emails mas nenhum telefone, ou 5 telefones e nenhum email, ou 200 de cada. Não faz diferença.
Logo, você não iria "passar" nenhuma ArrayList para a pessoa.
Mudemos a classe Pessoa, o construtor agora só recebe o nome.
Telefone e Email são trocados por ArrayLists
os setTelefone e setEmail seriam trocados por addTelefone e addEmail (o que implica em fazer métodos removeTelefone e removeEmail também)
e um getTelefones e getEmails, que retornam a ArrayList inteira.
[size=4]eu só queria saber da onde você tirou a idéia de deixar 4 numeros vazios em cada ArrayList o_O[/size]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
A ta, pera, lembrei de uma coisa, arrayLIST, ou seja cada posição da ArrayList é uma lista(lembrei de Python). Logo quando eu chamar a Pessoa onde o index seja 1, vai aparecer todos os números e email que estão no index 1 de suas ArrayList certo? Mais uma dúvida... Eu posso ficar adicionando quantos números e email eu bem entender, mas como eu faria isso? um while? Quando o número for por ex.: 0000-0000 ai ele para de add?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]A ta, pera, lembrei de uma coisa, arrayLIST, ou seja cada posição da ArrayList é uma lista(lembrei de Python).
Não.
Ela é uma [url=http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html]Array[/url]-[url=http://docs.oracle.com/javase/7/docs/api/java/util/List.html]List[/url] porque é uma implementação da interface List, que usa uma Array como forma de armazenar os dados.
Em outras palavras, não sei se você conhece estruturas da dados, mas é uma [url=http://pt.wikipedia.org/wiki/Lista]Lista[/url], como se fosse uma Array/Matriz/Vetor, só que com numero ilimitado.
[quote="Murilo Lilo"]
Logo quando eu chamar a Pessoa onde o index seja 1, vai aparecer todos os números e email que estão no index 1 de suas ArrayList certo?
Quando você chamar o index 1, vai pegar a Pessoa que tiver no index 1, da mesma forma que uma Array.
A Pessoa por sua vez, vai ter os seus atributos, e [url=http://javafree.uol.com.br/topic-884695-Duvidas-com-ArrayListcontains.html?page=1#217257]suas próprias ArrayList dentro dela.[/url]
[quote="Murilo Lilo"]
Mais uma dúvida... Eu posso ficar adicionando quantos números e email eu bem entender, mas como eu faria isso? um while? Quando o número for por ex.: 0000-0000 ai ele para de add?
Seria um loop. Mas geralmente você define uma condição, por exemplo, quando o usuário digitar "-1" ou quando o usuário digitar alguma palavra chave "sair", "fim"... Algo desse tipo, você quem manda.
GOSTEI 0
Rafael Nunes
11/01/2012
//Primeiro criamos um ArrayList.
List<String> umaLista = new ArrayList<String>();
//Para adicionar elementos na lista, usa-se o método add
umaLista.add("exemplo1");
umaLista.add("exemplo2");
umaLista.add("exemplo3");
return umaLista;
acho que é assim!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="rafaelsunn"]
//Primeiro criamos um ArrayList.
List<String> umaLista = new ArrayList<String>();
//Para adicionar elementos na lista, usa-se o método add
umaLista.add("exemplo1");
umaLista.add("exemplo2");
umaLista.add("exemplo3");
return umaLista;
acho que é assim!
Sim... assim é um modo de se usar uma ArrayList.
Só está um pouco fora de contexto.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
package ListaPackage;
import java.util.ArrayList;
public class Pessoa {
private String nome;
private String telefone; // <= viraria => private ArrayList<String> telefone;
private String email; // <= viraria => private ArrayList<String> email;
@Override
public String toString(){
return getNome()+" "+getTelefone()+" "+getEmail(); // isso seria alterado também
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone; // já esta retornando a ArrayList inteira?
}
public void setTelefone(String telefone) { // <= viraria => public void addTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email; // já esta retornando a ArrayList inteira?
}
public void setEmail(String email) { // <= viraria => public void addEmail(String email) {
this.email = email;
}
public Pessoa(String nome, String telefone, String email) { // <= viraria => public Pessoa(String nome) {
setNome(nome);
setTelefone(telefone);
setEmail(email);
}
}
Pessoa.java ficaria assim?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
isso
e ia faltar criar os métodos removeTelefone e removeEmail
public String getTelefone() {
return telefone; // já esta retornando a ArrayList inteira?
}
não, na verdade, se você deixar assim, não compila. Só precisa mudar a assinatura do método.
public ArrayList<String> getTelefone()
eee, eu recomendo que as variáveis das ArrayList tenham um nome no plural para indicar que são mais que um
private ArrayList<Sting> telefones; //telefoneS
private ArrayList<Sting> emails; //emailS
(isso implica em mudar o get para getTelefone[b]s[/b]() e getEmail[b]s[/b]() )
GOSTEI 0
Luciano Cargnelutti
11/01/2012
"Só precisa mudar a assinatura do método", seria mudar o nome do método?
GOSTEI 0
Murilo Lopes
11/01/2012
Sinceramente,
Quando implementar toda essa agenda em uma interface gráfica com botões e tudo organizadinho, isso vai virar um software BEM decente!
A idéia desse tópico está virando a coisa mais genial de todo o fórum! Ele aborda tantas coisas em um único assunto...
Veja só, com esse tópico, alguem que começa Java do 0 vai, de prima, fazer um software, e vai aprender conceitos básicos de orientação a objetos, além de conceitos básicos de java(métodos da classe string, classes de leitura e gravação de arquivos, método toString(), etc.). E depois de tudo, vai implementar em interface gráfica, aprendendo a usar os componentes da mesma(futuro do tópico XD).
Quem ler esse tópico vai aprender fazendo.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]"Só precisa mudar a assinatura do método", seria mudar o nome do método?
"nome" e "assinatura" não é a mesma coisa...
da uma lida aqui
https://www.devmedia.com.br/post-7348-Metodos.html
[quote="MathewsMotta"]
Quem ler esse tópico vai aprender fazendo.
Vai mesmo!
esse tópico vai virar um tutorial completo de java xD
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]"Só precisa mudar a assinatura do método", seria mudar o nome do método?
Em resumo, a assinatura do método são os tipos dos argumentos e seu valor de retorno.
EDIT: E o nome, claro.
EDIT²: Explicando melhor:
Método:
nomeDoMetodo(Parametros doMetodo)
Isso é a assinatura do método. Não é apenas o nome, mas o nome junto com o parâmetro. Mudar a assinatura é mudar qualquer coisa em relação a isso, como por exemplo, acrescentar/deletar argumentos ou mudar o nome do método.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
package ListaPackage;
import java.util.ArrayList;
public class Pessoa {
private String nome;
ArrayList<String> telefones = new ArrayList<>();
ArrayList<String> emails = new ArrayList<>();
@Override
public String toString(){
return getNome();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public ArrayList<String> getTelefones() {
return telefones;
}
public void addTelefone(ArrayList<String> telefone) {
this.telefones = telefone;
}
public ArrayList<String> getEmails() {
return emails;
}
public void addEmail(ArrayList<String> email) {
this.emails = email;
}
public void removeTelefone(){
// Não sei oque por aqui!
}
public void removeEmail(){
// Não sei oque por aqui!
}
public Pessoa(String nome) {
setNome(nome);
}
}
Onde tem mais erros? Se não tiver o que fazer?
GOSTEI 0
Mathews Motta
11/01/2012
Murilo, você nao aprendeu a apagar pessoas da list?
A lógica nesse caso é a MESMA, apenas vc irá tratar os arraylists separadamente. Em vez de deletar PESSOA por inteiro(juntando os 3 atributos), vc vai deletar TELEFONE e EMAIL separadamente.
Sacou?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Sim, sim, saquei. Pera só um instante que eu to postando um meio que desabafo! Gostaria da sua opinião também!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Vou postar algumas dúvidas, críticas e qualquer coisa que seja conto com a opinião de que passar por aqui...
Existem várias escolas(que ensinam programação) por ai, eu aprendi Python no meu segundo período da faculdade, qual a diferença entre alguém que faz um curso de Python na faculdade e outro que faz em alguma dessas escolas(cursos profissionalizantes, que seja...)?
Eu só vou pegar java no quarto período, semestre que vem, se eu deixasse de estudar java aqui, esperasse pra ver na faculdade e terminasse com o que me ensinaram lá eu poderia colocar no curriculum experiência em Java ou ao menos me candidatar a uma vaga que requeira tal conhecimento?
Quero seguir na área de programação, pois é a única coisa que faço me divertindo(acho que posso falar assim), sem falar que na central de estágios da faculdade que eu estudo, para cada 20 oportunidades de estágio que aparece, 2 ou 3(e olhe lá) são para Análise de Sistemas(curso que eu faço). E o que me deixa mais constrangido é ver que o cara quer pagar 250 reais para uma pessoa trabalhar 4 horas diárias, tudo bem que tem universidades públicas que as pessoas tem que fazer estágio obrigatório(muitas vezes sem receber 1 centavo).
Devo postar o link? Acho que só com ele vocês entenderam minha revolta!
Vou postar pois estou de saída, qualquer erro é só chamar um adm pra editar aqui: [url]http://www.cesmac.com.br/centralDeEstagios.php?c=1416[/url]
GOSTEI 0
Mathews Motta
11/01/2012
Murilo,
Sim, vc pode dizer "se divertindo". Eu também me divirto programando. Me divirto porque lógica é divertida. E é divertida puramente por ser lógica! Por isso não é difícil ver programadores que também sabem/cursaram filosofia, e vice-versa.
Sobre estágio, não se preocupe. O estágio virá, mas não se limite ao esquema de estágio da faculdade! Empresas grandes estão sempre atrás de estagiários competentes. Se vc entupir seu curriculum com seu interesse em aprender, isso vai ser de mais valia do que qualquer conhecimento que você coloque também, pode ter certeza!
As empresas não querem estagiários que já saibam de tudo, querem aquele que quer aprender tudo! Essas empresas q pede 1293123 requisitos para estágio NÃO PRESTAM.
Fale com conhecidos, conheça empresas grandes de tecnologia. Nos seus sites sempre há uma ala para enviar currículos. Estagiário em tecnologia é o maior investimento hoje em dia, porque é mão de obra qualificada e barata(Eu ganho 1500 contanto salario+vale refeição + vale transporte, e sem carteira assinada. Acredite, isso é MUITO barato.)
Lembre-se que sempre há portas abertas para quem tem vontade de entrar.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="MathewsMotta"]
Método:
nomeDoMetodo(Parametros doMetodo)
faltou o tipo de retorno e o modificador de visibilidade (mas eu deixo fingir que você omitiu porque era [color=blue]default[/color])
[quote="Murilo Lilo"]
Existem várias escolas(que ensinam programação) por ai, eu aprendi Python no meu segundo período da faculdade, qual a diferença entre alguém que faz um curso de Python na faculdade e outro que faz em alguma dessas escolas(cursos profissionalizantes, que seja...)?
E qual é a diferença de alguém que está pagando 500 por mês em um curso de java e você que está aprendendo sozinho na garra?
[quote="Murilo Lilo"]
Eu só vou pegar java no quarto período, semestre que vem, se eu deixasse de estudar java aqui, esperasse pra ver na faculdade e terminasse com o que me ensinaram lá eu poderia colocar no curriculum experiência em Java ou ao menos me candidatar a uma vaga que requeira tal conhecimento?
ter "experiencia" é só se você trabalhou ou fez estágio na area.
Agora, "conhecimento", tanto faz se você aprendeu na universidade de Harvard ou lendo em um papel de bala.
Se você sabe fazer, então você coloca que sabe!
É CLARO QUE, infelizmente, muita empresa ainda leva em consideração "diploma", que de verdade, não vale nada mesmo.
[quote="Murilo Lilo"]
Quero seguir na área de programação, pois é a única coisa que faço me divertindo(acho que posso falar assim), sem falar que na central de estágios da faculdade que eu estudo, para cada 20 oportunidades de estágio que aparece, 2 ou 3(e olhe lá) são para Análise de Sistemas(curso que eu faço). E o que me deixa mais constrangido é ver que o cara quer pagar 250 reais para uma pessoa trabalhar 4 horas diárias, tudo bem que tem universidades públicas que as pessoas tem que fazer estágio obrigatório(muitas vezes sem receber 1 centavo).
Devo postar o link? Acho que só com ele vocês entenderam minha revolta!
Vou postar pois estou de saída, qualquer erro é só chamar um adm pra editar aqui: [url]http://www.cesmac.com.br/centralDeEstagios.php?c=1416[/url]
Estágio é foda... hoje em dia, estágio nada mais é que mão de obra barata.
Terminei um curso de dois anos de eletrônica, melhor aluno da sala, fiz o melhor tcc do curso, e ainda assim, não pude pegar meu diploma porque não completei 3 meses de estágio obrigatório... E pudera, fazendo ensino médio junto!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="MathewsMotta"](Eu ganho 1500 contanto salario+vale refeição + vale transporte, e sem carteira assinada. Acredite, isso é MUITO barato.)
PORRA!
eu ganho 550 e olhe lá! :/
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"]MathewsMotta:
(Eu ganho 1500 contanto salario+vale refeição + vale transporte, e sem carteira assinada. Acredite, isso é MUITO barato.)
PORRA!
eu ganho 550 e olhe lá! :/
Meu pai paga minha faculdade que de 490(com desconto, pagando em dia) subiu pra quase 600, e eu sonho em fazer um sistema que alguém tope aceitar apagar 10 ou 20 reais, ou simplesmente fazer algo que me dê um real de retorno... Mas... Tamo na luta...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"][quote="sekkuar"]MathewsMotta:
(Eu ganho 1500 contanto salario+vale refeição + vale transporte, e sem carteira assinada. Acredite, isso é MUITO barato.)
PORRA!
eu ganho 550 e olhe lá! :/
Meu pai paga minha faculdade que de 490(com desconto, pagando em dia) subiu pra quase 600, e eu sonho em fazer um sistema que alguém tope aceitar apagar 10 ou 20 reais, ou simplesmente fazer algo que me dê um real de retorno... Mas... Tamo na luta...
então, continuando... parou onde?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Cara, agora a porra ficou seria, meu cérebro ta todo enrolado! O meu construtor "Pessoa" tinha os três parâmetro, mas agora só tem o "nome" como parâmetro, logo tive que apagar todos os outros dois parâmetros dos locais onde eram usados. Agora onde eu vou colocar os telefone e emails? Confesso que agora eu estou completamente perdido! Sei que o get(telefone e email) agora não é mais string e sim ArrayList<String>, sei que o set(telefone e email) agora é add(telefone e email), o remove(telefone e email) ta assim:
public void removeTelefone(){
this.telefones = new ArrayList<String>();
int cont = 0;
System.out.println("Digite o nome que deseja apagar:");
String telefone = scanner.nextLine();
for (String tel : telefones){
if(tel.equals(telefone)){
System.out.println(cont+"=> "+ tel);
cont++;
}
}
System.out.println("A busca encontrou "+ cont +" número(s).");
System.out.println("Cadastro apagado com sucesso!");
}
E sinceramente eu não sei o que eu escrevi ai, pode ser por que eu estou cansado(desculpa) mas o negocio ficou doido aqui dentro da cabeça!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"][quote="sekkuar"]MathewsMotta:
(Eu ganho 1500 contanto salario+vale refeição + vale transporte, e sem carteira assinada. Acredite, isso é MUITO barato.)
PORRA!
eu ganho 550 e olhe lá! :/
Meu pai paga minha faculdade que de 490(com desconto, pagando em dia) subiu pra quase 600, e eu sonho em fazer um sistema que alguém tope aceitar apagar 10 ou 20 reais, ou simplesmente fazer algo que me dê um real de retorno... Mas... Tamo na luta...
Só um apêndice.
Se vc quer ganhar dinheiro trabalhando como freelancer fazendo seus próprios programas, recomendaria fortemente a você aprender a fazer aplicativos para Android/iOS.
É a melhor forma de receber um retorno pelo próprio software hoje em dia. Mas o salário de um programador pleno em inicio de carreira é bom: em torno de 3000 reais líquido. Sabendo que é possível conciliar trabalho na empresa com o trabalho em casa, a melhora ainda mais.
@Sekkuar
Haha! Na verdade eu ganho 900, mas eu contei somando o vale-refeição e o vale-transporte também!
Além disso, acabaram que fizeram uma sacanagem comigo. Eu entrei na empresa com propósito de trabalhar com java, mas houve algumas mudanças de funcionários na equipe que eu estou, e a equipe, que antes tinha uma parte Java e uma parte COBOL, passou a ser apenas de COBOL.
Apesar de COBOL ser mais fácil, meu interesse está no JAVA, por isso não parei de estudar. Vamos ver o que o future me trará.
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]Cara, agora a porra ficou seria, meu cérebro ta todo enrolado! O meu construtor "Pessoa" tinha os três parâmetro, mas agora só tem o "nome" como parâmetro, logo tive que apagar todos os outros dois parâmetros dos locais onde eram usados. Agora onde eu vou colocar os telefone e emails? Confesso que agora eu estou completamente perdido! Sei que o get(telefone e email) agora não é mais string e sim ArrayList<String>, sei que o set(telefone e email) agora é add(telefone e email), o remove(telefone e email) ta assim:
public void removeTelefone(){
this.telefones = new ArrayList<String>();
int cont = 0;
System.out.println("Digite o nome que deseja apagar:");
String telefone = scanner.nextLine();
for (String tel : telefones){
if(tel.equals(telefone)){
System.out.println(cont+"=> "+ tel);
cont++;
}
}
System.out.println("A busca encontrou "+ cont +" número(s).");
System.out.println("Cadastro apagado com sucesso!");
}
E sinceramente eu não sei o que eu escrevi ai, pode ser por que eu estou cansado(desculpa) mas o negocio ficou doido aqui dentro da cabeça!
Calma. Isso é comum. Acontece que vc estava com um programa sólido, e derrepente mudou uma coisa na lógica dele. O que aconteceu foi que essa mudança ocasionou em um efeito cascata, então vc tem que modificar tudo que foi afetado. Organize seu pensamento, pense no caminho do programa. Sair dessa é um ótimo treinamento!
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Cara, agora a porra ficou seria, meu cérebro ta todo enrolado! O meu construtor "Pessoa" tinha os três parâmetro, mas agora só tem o "nome" como parâmetro, logo tive que apagar todos os outros dois parâmetros dos locais onde eram usados. Agora onde eu vou colocar os telefone e emails? Confesso que agora eu estou completamente perdido! Sei que o get(telefone e email) agora não é mais string e sim ArrayList<String>, sei que o set(telefone e email) agora é add(telefone e email), o remove(telefone e email) ta assim:
public void removeTelefone(){
this.telefones = new ArrayList<String>();
int cont = 0;
System.out.println("Digite o nome que deseja apagar:");
String telefone = scanner.nextLine();
for (String tel : telefones){
if(tel.equals(telefone)){
System.out.println(cont+"=> "+ tel);
cont++;
}
}
System.out.println("A busca encontrou "+ cont +" número(s).");
System.out.println("Cadastro apagado com sucesso!");
}
E sinceramente eu não sei o que eu escrevi ai, pode ser por que eu estou cansado(desculpa) mas o negocio ficou doido aqui dentro da cabeça!
Não...
lembre-se que a classe pessoa não tem Scanner.
O método remove vai receber ou um indice, ou uma String, que vai ser removida
exemplo
public void removeEmail(String email){
emails.remove(email); //remove o email 'email'
}
ou
public void removeEmail(int index){
emails.remove(index); //remove o email da posição 'index'
}
só escolher qual é melhor... na verdade, a sobrecarga de métodos permite que você tenha os dois. Você não aprendeu sobre sobrecarga ainda, aprendeu? É uma boa chance pra você usa-la :P
se você tiver esses dois métodos, pode chamar para remover assim
Pessoa p = //escolhe a pessoa
p.removeEmail("trololololo@nyan.cat"); //remove o email 'trololololo@nyan.cat'
//ou
p.removeEmail(0); //remove o primeiro email da lista (indice 0 )
Mas é importante notar uma coisa:
Chamar o removeEmail com uma String, só vai apagar ele da lista se existir um exatamente igual, senão, não faz nada.
Chamar o removeEmail por indice vai remover o email daquele indice, mesmo que não seja o indice certo (ou seja, pode apagar o email errado se você não tomar cuidado)
E também pode [url=http://javafree.uol.com.br/viewtopic.jbb?t=882405&page=1#201717]lançar uma Exception caso você passe um valor inválido para o indice.[/url]
GOSTEI 0
Douglas Eric
11/01/2012
Completando,
A classe PESSOA não pode ter scanner porque ela não tem funcionalidades. Ela está lá para ser instanciada e não para ser própriamente "usada". Não sei se me fiz entender direito...
GOSTEI 0
Luciano
11/01/2012
[quote="MathewsMotta"]Completando,
A classe PESSOA não pode ter scanner porque ela não tem funcionalidades. Ela está lá para ser instanciada e não para ser própriamente "usada". Não sei se me fiz entender direito...
Isso depende da sua interpretação de "usada"
Se o propósito da classe Pessoa é guardar as informações e retorna-las, quando você usa um set ou get, você está "usando" a classe Pessoa.
No meu entendimento, alguma coisa que não é pra ser "usada" seria uma classe que não vai ser instanciada. (@deprecated ?)
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Ta certo aqui sekk?
package ListaPackage;
import java.util.ArrayList;
public class Pessoa {
private String nome;
ArrayList<String> telefones = new ArrayList<>();
ArrayList<String> emails = new ArrayList<>();
@Override
public String toString(){
return getNome();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public ArrayList<String> getTelefones() {
return telefones;
}
public void addTelefone(ArrayList<String> telefone) {
this.telefones = telefone;
}
public ArrayList<String> getEmails() {
return emails;
}
public void addEmail(ArrayList<String> email) {
this.emails = email;
}
public void removeTelefone(String telefone){
emails.remove(telefone);
}
public void removeEmail(String email){
emails.remove(email);
}
public Pessoa(String nome) {
setNome(nome);
}
}
Não ta mostrando nenhum erro ai encima, mas quando eu vou no arquivo Agenda.java no método alterar:
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
p.setTelefone(tel);// aqui agora é addTelefones(ArrayList<String> telefone) só que eu acho que esse parâmetro ta errado...
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
p.setEmail(mail);// aqui agora é addEmails(ArrayList<String> email) só que eu acho que esse parâmetro ta errado...
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Ta certo aqui sekk?
public void addTelefone(ArrayList<String> telefone) {
this.telefones = telefone;
}
public void addEmail(ArrayList<String> email) {
this.emails = email;
}
Nananinanão!
add, como o nome sugere, vai "adicionar", não "setar"
Você recebe uma String, e adiciona ela na ArrayList correta.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="MathewsMotta"]Completando,
A classe PESSOA não pode ter scanner porque ela não tem funcionalidades. Ela está lá para ser instanciada e não para ser própriamente "usada". Não sei se me fiz entender direito...
Isso depende da sua interpretação de "usada"
Se o propósito da classe Pessoa é guardar as informações e retorna-las, quando você usa um set ou get, você está "usando" a classe Pessoa.
No meu entendimento, alguma coisa que não é pra ser "usada" seria uma classe que não vai ser instanciada. (@deprecated ?)
É, imaginei que eu não iria ser compreendido. Eu até falei isso...
Não é bem "usada" a palavra.... É pq vc usa ela, sim, mas ela não possui funcionalidades... Seus métodos não calculam nada em relação ao programa, ela só guarda informações.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
E qual a função que vai setar o telefone?
public void addEmail(String email) {
telefones.add(email);
}
public void addTelefone(String telefone) {
telefones.add(telefone);
}
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]E qual a função que vai setar o telefone?
public void addEmail(String email) {
telefones.add(email);
}
public void addTelefone(String telefone) {
telefones.add(telefone);
}
O que???
EDIT:
tinha esquecido!
[img]http://javafree.uol.com.br/files_user/files/7/26/65/Lol_que.jpg[/img]
GOSTEI 0
Mathews Motta
11/01/2012
[quote="Murilo Lilo"]E qual a função que vai setar o telefone?
public void addEmail(String email) {
telefones.add(email);
}
public void addTelefone(String telefone) {
telefones.add(telefone);
}
Mas....
Ela tá na sua cara :shock:
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Tô ficando louco cara...
public ArrayList<String> getTelefones() { // o que esse método faz?
return telefones;
}
public void addTelefone(String telefone) {// e o que esse método faz?
telefones.add(telefone);
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Tô ficando louco cara...
public ArrayList<String> getTelefones() { // o que esse método faz?
return telefones;
}
public void addTelefone(String telefone) {// e o que esse método faz?
telefones.add(telefone);
}
retorna todos os telefones e adiciona um novo telefone à pessoa em questão, respectivamente.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Como esse meu método que adiciona telefone vai poder adicionar mais de um telefone?
Outra dúvida, no momento do cadastro o usuário pode escolher colocar mais de um número ou só na hora de alterar?
Olha o meu método alterar:
public void alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
if (cont != 0){
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
telefones.add(tel);
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
emails.add(mail);
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
}else{
msgVoltar();
}
}
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Como esse meu método que adiciona telefone vai poder adicionar mais de um telefone?
Cada chamada do método adiciona um, novo numero
p.addTelefone("1234-5678");
p.addTelefone("9876-5432");
p.addTelefone("1212-3232");
Vai adicionar os três telefones na mesma Pessoa.
[quote="Murilo Lilo"]
Outra dúvida, no momento do cadastro o usuário pode escolher colocar mais de um número ou só na hora de alterar?
A critério seu, é seu programa.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Por que:
p.addTelefone("1234-5678");
?
Se p(pessoa) só tem como parâmetro o nome como eu vou add telefone?
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]Por que:
p.addTelefone("1234-5678");
?
Se p(pessoa) só tem como parâmetro o nome como eu vou add telefone?
qual é a sua definição de "parâmetro"?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"][quote="Murilo Lilo"]Por que:
p.addTelefone("1234-5678");
?
Se p(pessoa) só tem como parâmetro o nome como eu vou add telefone?
[img]http://javafree.uol.com.br/forum/images/smiles/tantan.gif[/img]
O cara tava indo tão bem, e dae acontece isso....
Acho que ele já queimou a cota de neurônios para o ano inteiro.
GOSTEI 0
Luciano
11/01/2012
[quote="sekkuar"][quote="ryuuji"][quote="Murilo Lilo"]Por que:
p.addTelefone("1234-5678");
?
Se p(pessoa) só tem como parâmetro o nome como eu vou add telefone?
[img]http://javafree.uol.com.br/forum/images/smiles/tantan.gif[/img]
O cara tava indo tão bem, e dae acontece isso....
Acho que ele já queimou a cota de neurônios para o ano inteiro.
Culpa sua.
Você quebrou o cérebro do cara.
Agora arranje outra cobaia... digo, aprendiz!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"]Culpa sua.
Você quebrou o cérebro do cara.
Agora arranje outra cobaia... digo, aprendiz!
Essas cobaias nunca duram...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"][quote="ryuuji"]Culpa sua.
Você quebrou o cérebro do cara.
Agora arranje outra cobaia... digo, aprendiz!
Essas cobaias nunca duram...
Hoje em dia, "pensar cansa".
Engraçado é a ironia do desenvolvimento do mundo.
Antigamente para se ter conhecimento era um trabalho árduo: procurar livros e livros ir em bibliotecas para correr atrás de assuntos que você acha com um clique no Google. Mas mesmo assim, as pessoas corriam atrás!
Hoje, o conhecimento possui acesso baratíssimo e praticamente infinito de forma extremamente fácil. Justamente quando a humanidade está muito mais preguiçosa para buscar o conhecimento!!!
Malditos fazpramim's. Estão se reproduzindo rápido demais...
PS: Será que Deus quando programou o mundo ele usou um código pronto? Pensem nisso.
:cool:
GOSTEI 0
Douglas Eric
11/01/2012
Será que o cara desistiu mesmo? D:
[quote="MathewsMotta"]
PS: Será que Deus quando programou o mundo ele usou um código pronto? Pensem nisso.
putz, essa foi de doer no fígado!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"]
[...]
[quote="MathewsMotta"]
PS: Será que Deus quando programou o mundo ele usou um código pronto? Pensem nisso.
putz, essa foi de doer no fígado!
Se Deus usou código pronto, quem foi que fez o código?
O cara deve ser moderador do "MundoFree.ORG"!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"]
Se Deus usou código pronto, quem foi que fez o código?
O capeta, obvio!
Isso explica o [url=http://javafree.uol.com.br/topic-884677-criacao-de-classes-metodos.html?page=1#216574]polimorfismo[/url].
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Renascendo das cinzas =D :twisted:
Deixa só eu me colocar no lugar...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Esse é meu método que salva os dados no arquivo txt:
public static void salvar(ArrayList<Pessoa> pessoas) {
try {
File file = new File("arquivo.txt");
if (! file.exists()){
return;
}else{
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome();
bw.write(salvando);
bw.newLine();
bw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
De acordo com o que esta ai, só ta salvando o nome da pessoa! Para poder salvar os telefones e os email, eu teria que colocar as ArrayList's como parâmetros nesse método?
GOSTEI 1
Luciano Cargnelutti
11/01/2012
wow!
calma ae!
você já conseguiu cadastrar os vários telefones/emails?
no cadastrar e alterar?
e o toString()?
a parte do arquivo vai ser complicada! deixa para depois
GOSTEI 0
Luciano Cargnelutti
11/01/2012
AAA então tá...
Esse negocio de cadastrar vários telefones ta tenso cara =(
GOSTEI 0
Luciano
11/01/2012
[quote="Murilo Lilo"]AAA então tá...
Esse negocio de cadastrar vários telefones ta tenso cara =(
por que?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
AFF vei que MERDA, eu não tô conseguindo fazer o cara digitar mais de um número! EU TO FICANDO LOUCO!
while (telefone != "sair"){
System.out.println("Digite o telefone:");
telefone = scanner.nextLine();
}
O que tem de errado ai cara? Antes eu iniciei a variável, e quando eu digito "sair" continua repetindo!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]AFF vei que MERDA, eu não tô conseguindo fazer o cara digitar mais de um número! EU TO FICANDO LOUCO!
while (telefone != "sair"){
System.out.println("Digite o telefone:");
telefone = scanner.nextLine();
}
O que tem de errado ai cara? Antes eu iniciei a variável, e quando eu digito "sair" continua repetindo!
vamos lá, mas uma vez:
== é usado para comparar variáveis de tipo primitivo
equals() é usado para comparar Strings (e objetos em geral)
while (!telefone.equals("sair")){
System.out.println("Digite o telefone:");
telefone = scanner.nextLine();
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Aff cara, que vacilo, =(...
Sim, eu devo colocar o método que adiciona dentro ou fora do while?
GOSTEI 0
Luciano
11/01/2012
dentro.
A sequência segue:
- mostra mensagem pedindo insert
- recebe String do usuário
- adiciona telefone à pessoa.
Só cuidado para não acabar inserindo "sair" como telefone.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Exception in thread "main" java.lang.NullPointerException
at ListaPackage.Agenda.cadastrar(Agenda.java:134)
at ListaPackage.Agenda.menu(Agenda.java:173)
at ListaPackage.Main.main(Main.java:6)
Quando eu digito o nome aparece isso, o que eu faço?
http://javafree.uol.com.br/topic-882405-FAQ-Stack-Trace.html
GOSTEI 0
Luciano Cargnelutti
11/01/2012
O problema agora é como fazer pra não cadastrar o "sair"!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Problema resolvido, IF!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Pronto, agora na hora de se cadastrar o usuário cadastra seu nome, e os telefones e os emails, digitando sair para interromper o cadastro do mesmo.
Agora como irei listar isso? Um FOR para cada ArrayList?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Pronto, agora na hora de se cadastrar o usuário cadastra seu nome, e os telefones e os emails, digitando sair para interromper o cadastro do mesmo.
Agora como irei listar isso? Um FOR para cada ArrayList?
Isso, escreve na tela
Telefones:
-telefone1
-telefone2
-telefone3
.
.
.
-telefoneN
e depois com os emais. um for para cada lista.
É pra isso que vai servir o seus métodos getTelefones e getEmails
ArrayList<String> tels = p.getTelefones();
for(String tel: tels){
//...
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Cara aconteceu uma merda, meu pc travou e quando reiniciei meu projeto sumiu, isso já tinha acontecido, só que agora o código também sumiu, perdi o arquivo Agenda, e Pessoa os mais importantes vei, TO MALUCO, O MUNDO VAI ACABAR, EU VOU ME EXPLODIR JAJA!
¬¬
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Ei vei, eu recebi um email de uma mulher que embaixo dizia que o usuário foi banido pela administração... Isso é spam, algo estranho ou é verdade?
esse é o email dela:
addressrebekahalkhalifa@yahoo.com
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Ei vei, eu recebi um email de uma mulher que embaixo dizia que o usuário foi banido pela administração... Isso é spam, algo estranho ou é verdade?
esse é o email dela:
addressrebekahalkhalifa@yahoo.com
email ou mensagem particular (MP)?
Recebi uma mensagem particular em inglês dessa pessoa (pouco antes dela ser banida). É SPAM, ignore...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
MP
GOSTEI 0
Douglas Eric
11/01/2012
Era spam, mandou pra várias pessoas. Pode excluir a mensagem...
E sobre o projeto... COMO ASSIM???
teu pc tah com virus ou alguma coisa????
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Não cara, não sei por que é, quando eu digo que ele trava é a net que para de funcionar, ai algumas outras coisas também param, ai só desliga segurando o botão de desligar!
O projeto eu to vasculhando as páginas anteriores do tópico pra tentar juntar as peças! Jaja to terminando!
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="Murilo Lilo"]Não cara, não sei por que é, quando eu digo que ele trava é a net que para de funcionar, ai algumas outras coisas também param, ai só desliga segurando o botão de desligar!
O projeto eu to vasculhando as páginas anteriores do tópico pra tentar juntar as peças! Jaja to terminando!
velho... isso é virus!
passa um avast ou combofix no seu pc
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Vou por pra baixar agora essa parada de ComboFix
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"]wow!
calma ae!
você já conseguiu cadastrar os vários telefones/emails?
no cadastrar e alterar?
e o toString()?
a parte do arquivo vai ser complicada! deixa para depois
Como assim no toString()?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"][quote="sekkuar"]wow!
calma ae!
você já conseguiu cadastrar os vários telefones/emails?
no cadastrar e alterar?
e o toString()?
a parte do arquivo vai ser complicada! deixa para depois
Como assim no toString()?
seu toString() retorna Nome + Telefone + Email
você vai precisar mudar isso pra ele mostrar todos os telefones e todos os emails.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Não faço a menor ideia de como irei fazer isso, me da um norte?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="Murilo Lilo"]Não faço a menor ideia de como irei fazer isso, me da um norte?
Já dei!
faça aqueles fors com as listas
GOSTEI 0
Luciano Cargnelutti
11/01/2012
pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
GOSTEI 0
Mathews Motta
11/01/2012
[quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="MathewsMotta"][quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
Ele olha para a placa que diz: "Polo Sul".
GOSTEI 0
Luciano
11/01/2012
[quote="ryuuji"][quote="MathewsMotta"][quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
Ele olha para a placa que diz: "Polo Sul".
tah ae uma coisa para se pensar.
Se você está no polo sul, não existe sul nem leste nem oeste, só norte.
Então alguém no exato polo (magnético) sul, vai ir para o norte, não importa em qual direção ele vá.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
sekk, vou postar o código todinho como esta agora, vou na dentista e assim que voltar resolvo tudo que você achar de devo, deve ter bastante coisa errada já que eu regredi! Desde já agradeço sua paciência =D
package PackeageTelefone;
import java.util.ArrayList;
import java.util.Scanner;
public class Agenda{
private ArrayList<Pessoa> pessoas;
ArrayList<String> telefones;
ArrayList<String> emails;
private Scanner scanner;
public void apagar(){
int cont = 0;
int index;
ArrayList<Pessoa> apag = new ArrayList<Pessoa>();
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(cont+"=> "+p);
cont++;
apag.add(p);
}
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja apagar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa p = apag.get(index);
pessoas.remove(p);
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);
msgVoltar();
}
for (String q : telefones){
System.out.println(q);
}
for (String r : emails){
System.out.println(r);
}
}
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 alterar(){
int cont = 0;
int index;
ArrayList<Pessoa> temp = new ArrayList<Pessoa>();
System.out.println("Digite o nome que deseja alterar:");
String nome = scanner.nextLine();
for (Pessoa p : pessoas){
if(p.getNome().equals(nome)){
System.out.println(cont+"º "+p);
cont++;
temp.add(p);
}
System.out.println("A busca encontrou "+ cont +" nome(s).");
System.out.println("Escolha o número da opção que deseja alterar:");
index = Integer.parseInt(scanner.nextLine());
Pessoa pp = temp.get(index);
int opc;
do{
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 3 - EMAIL\n 0 - Encerrar alteração");
opc = Integer.parseInt(scanner.nextLine());
switch (opc){
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = scanner.nextLine();
p.setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = scanner.nextLine();
//pp.setTelefone(tel);
break;
case 3:
System.out.println("Digite o novo email do cadastro.");
String mail = scanner.nextLine();
//p.setEmail(mail);
break;
case 0:
msgVoltar();
break;
}
}while(opc != 0);
}
}
public void msgVoltar(){
String opc;
System.out.println("Tecle Enter para voltar!");
opc = scanner.nextLine();
}
public void cadastrar(){
String telefone = null;
String email = null;
System.out.println("Formulário de cadastro:");
System.out.println("Digite o nome:");
String nome = scanner.nextLine();
System.out.println("Digite o telefone:");
telefone = scanner.nextLine();
while (! telefone.equals("sair")){
System.out.println("Digite o telefone:");
telefone = scanner.nextLine();
if (! telefone.equals("sair")){
telefones.add(telefone);
}
}
System.out.println("Digite o email:");
email = scanner.nextLine();
while (! email.equals("sair")){
System.out.println("Digite o email:");
email = scanner.nextLine();
if (! email.equals("sair")){
emails.add(email);
}
}
Pessoa pessoa = new Pessoa(nome);
pessoas.add(pessoa);
System.out.println("Cadastro efetuado com sucesso!\n");
msgVoltar();
}
public void menu(){
int opc;
Arquivo.ler(pessoas);
do{
telefones = new ArrayList<String>();
emails = new ArrayList<String>();
System.out.println("=================");
System.out.println(pessoas);
System.out.println(telefones);
System.out.println(emails);
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 - Alterar");
System.out.println("5 - Apagar");
System.out.println("0 - Sair");
System.out.println("==>");
try {
opc = Integer.parseInt(scanner.nextLine());
} catch (Exception ignore) {
opc = -1;
}
switch (opc){
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
listar();
break;
case 4:
alterar();
break;
case 5:
apagar();
break;
case 0:
Arquivo.salvar(pessoas);
break;
default:
System.out.println("Opção inválida, digite apenas números!");
msgVoltar();
}
}while(opc != 0);
}
public Agenda(){
this.pessoas = new ArrayList<Pessoa>();
this.scanner = new Scanner(System.in);
}
}
package PackeageTelefone;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Arquivo {
public static void salvar(ArrayList<Pessoa> pessoas) {
try {
File file = new File("arquivo.txt");
if (!file.exists()){
return;
}else{
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(Pessoa p : pessoas){
String salvando = p.getNome();
bw.write(salvando);
bw.newLine();
bw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ler(ArrayList<Pessoa> pessoas){
try {
File file = new File("arquivo.txt");
if (!file.exists()){
return;
}else{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null){
String[] dados = s.split(";");
Pessoa p = new Pessoa(dados[0]);
pessoas.add(p);
s = br.readLine();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package PackeageTelefone;
import java.util.ArrayList;
public class Pessoa {
private String nome;
private ArrayList<String> telefones;
private ArrayList<String> emails;
@Override
public String toString(){
return getNome();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public ArrayList<String> getTelefones() {
return telefones;
}
public void addTelefone(String telefone) {
telefones.add(telefone);
}
public ArrayList<String> getEmails() {
return emails;
}
public void addEmail(String email) {
emails.add(email);
}
public void removeTelefone(String telefone){
emails.remove(telefone);
}
public void removeEmail(String email){
emails.remove(email);
}
public Pessoa(String nome) {
setNome(nome);
}
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="sekkuar"][quote="ryuuji"][quote="MathewsMotta"][quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
Ele olha para a placa que diz: "Polo Sul".
tah ae uma coisa para se pensar.
Se você está no polo sul, não existe sul nem leste nem oeste, só norte.
Então alguém no exato polo (magnético) sul, vai ir para o norte, não importa em qual direção ele vá.
Se ele SAIR do Polo Sul sim, mas o que estávamos falando era que ele foi para o "norte errado" [size=4](você não adora quando as coisas ficam ironicamente engraçadas?)[/size] e acabou INDO para o Polo Sul.
Mas se ele estiver no Polo Norte, só haveria Sul para ir?
O que, removendo a metáfora, significa que alguém que está 100% certo não tem como continuar acertando?
[size=24]I'm a Genius![/size]
[img]http://memebase.com/wp-content/themes/vip/cheezcommon2/ragecomic/packs/various/images/Genius.png[/img]
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="ryuuji"][quote="sekkuar"][quote="ryuuji"][quote="MathewsMotta"][quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
Ele olha para a placa que diz: "Polo Sul".
tah ae uma coisa para se pensar.
Se você está no polo sul, não existe sul nem leste nem oeste, só norte.
Então alguém no exato polo (magnético) sul, vai ir para o norte, não importa em qual direção ele vá.
Se ele SAIR do Polo Sul sim, mas o que estávamos falando era que ele foi para o "norte errado" [size=4](você não adora quando as coisas ficam ironicamente engraçadas?)[/size] e acabou INDO para o Polo Sul.
Mas se ele estiver no Polo Norte, só haveria Sul para ir?
O que, removendo a metáfora, significa que alguém que está 100% certo não tem como continuar acertando?
[size=24]I'm a Genius![/size]
[img]http://memebase.com/wp-content/themes/vip/cheezcommon2/ragecomic/packs/various/images/Genius.png[/img]
se ele foi para o norte errado e acabou chegando no polo sul, quer dizer que apartir dali, não tem mais como ele fazer errado?
qualquer lugar que ele for vai ser o norte, então o lado certo.
E seguindo a sua mesma lógica "genial", alguém que está no polo sul, 100% errado, não tem como errar mais, e pode fazer qualquer coisa que vai estar automaticamente certo!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"]
[...]
E seguindo a sua mesma lógica "genial", alguém que está no polo sul, 100% errado, não tem como errar mais, e pode fazer qualquer coisa que vai estar automaticamente certo!
Exato!
Genial não? XD
Me surpreendo com quanto de esperteza tem na minha cachola...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Esses caras são geniais velho, só queria 10% disso =B, e eu aqui pra lá e pra cá, hora to aprendendo a programar ora to no polo sul =(, mas é assim mesmo =D
GOSTEI 0
Luciano Cargnelutti
11/01/2012
O método listar ficou assim:
public void listar(){
int a = pessoas.size();
System.out.println("A agenda tem "+a+" número(s) cadastrado(s)!");
System.out.println("===========================");
for (Pessoa p : pessoas){
System.out.println(p.getNome());
}
for (String q : telefones){
System.out.println(q);
}
for (String r : emails){
System.out.println(r);
}
msgVoltar();
}
To com dúvida no toString()... Ficaria assim?
@Override
public String toString(){
for (String q : telefones){
System.out.println(q);
}
for (String r : emails){
System.out.println(r);
}
return getNome()+" "+getTelefones()+" "+getEmails();
}
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="sekkuar"][quote="ryuuji"][quote="MathewsMotta"][quote="Murilo Lilo"]pera que agora ta dando um problema, não co conseguindo sair do while que faz o cara digitar os telefones
Acho que vc foi pro "norte errado" ...
Ele olha para a placa que diz: "Polo Sul".
tah ae uma coisa para se pensar.
Se você está no polo sul, não existe sul nem leste nem oeste, só norte.
Então alguém no exato polo (magnético) sul, vai ir para o norte, não importa em qual direção ele vá.
De fato, nessa situaçao a seta da bússola ficaria na vertical uaheuahuehauehaues
Alias, tudo isso é relativo.
Se vc ir todo o caminho para o Leste, você nunca irá parar. Aliás, você chegará no oeste andando para o leste.
Ou seja, mesmo que vc faça merda e vá para o lado errado, se vc continuar perseverante em sua decisão, mesmo que demore mais, você chegará ao seu destino?
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]O método listar ficou assim:
public void listar(){
int a = pessoas.size();
System.out.println("A agenda tem "+a+" número(s) cadastrado(s)!");
System.out.println("===========================");
for (Pessoa p : pessoas){
System.out.println(p.getNome());
}
for (String q : telefones){
System.out.println(q);
}
for (String r : emails){
System.out.println(r);
}
msgVoltar();
}
To com dúvida no toString()... Ficaria assim?
@Override
public String toString(){
for (String q : telefones){
System.out.println(q);
}
for (String r : emails){
System.out.println(r);
}
return getNome()+" "+getTelefones()+" "+getEmails();
}
Não.
O toString() é uma representação do seu objeto em formato de String.
Exemplo:
public class Pessoa{
private String nome;
private String cpf;
private String telefone;
public Pessoa(String nome, String cpf, String telefone){
this.nome = nome;
this.cpf = cpf;
this.telefone = telefone;
}
public String toString(){
return nome + ", com o CPF número: " + cpf;
}
}
Se eu cadastrasse "Ryuuji" com o CPF "000.000.000-00" e o telefone "(XX) 3333-3333" o meu toString() seria:
[quote="toString()"]
Ryuuji, com o CPF número: 000.000.000.00
Sacou?
GOSTEI 0
Luciano Cargnelutti
11/01/2012
[quote="MathewsMotta"]
[...]
De fato, nessa situaçao a seta da bússola ficaria na vertical uaheuahuehauehaues
Alias, tudo isso é relativo.
Se vc ir todo o caminho para o Leste, você nunca irá parar. Aliás, você chegará no oeste andando para o leste.
Ou seja, mesmo que vc faça merda e vá para o lado errado, se vc continuar perseverante em sua decisão, mesmo que demore mais, você chegará ao seu destino?
Não, nesse caso você cai no mar e morre afogado/comido por um tubarão.
GOSTEI 0
Luciano Cargnelutti
11/01/2012
Você compilou seu último código?
Para listar os telefones e email de um contato, você precisa colocar os loops dentro do loop dos contatos. Ver exemplo abaixo:
for (Pessoas)
{
for (pessoa.Telefones)
{
// mostar os telefones do contato
}
for (pessoa.Emails)
{
// mostar os emails do contato
}
}
GOSTEI 0
Mathews Motta
11/01/2012
[quote="ryuuji"][quote="MathewsMotta"]
Ou seja, mesmo que vc faça merda e vá para o lado errado, se vc continuar perseverante em sua decisão, mesmo que demore mais, você chegará ao seu destino?
Não, nesse caso você cai no mar e morre afogado/comido por um tubarão.
Não! Porque eu tenho um barquinho!!
E bem vindo ao forum Iluti!
GOSTEI 0
Murilo Ângelo
11/01/2012
[quote="MathewsMotta"][quote="ryuuji"][quote="MathewsMotta"]
Ou seja, mesmo que vc faça merda e vá para o lado errado, se vc continuar perseverante em sua decisão, mesmo que demore mais, você chegará ao seu destino?
Não, nesse caso você cai no mar e morre afogado/comido por um tubarão.
Não! Porque eu tenho um barquinho!!
E bem vindo ao forum Iluti!
Ah, então tá. Achei que você ia andando! XD
Mas é meio "Genius" a lógica heim?
Cara, não sei como não ganhei um nobel ainda...
GOSTEI 0
Douglas Eric
11/01/2012
[quote="llutti"]
Você compilou seu último código?
Para listar os telefones e email de um contato, você precisa colocar os loops dentro do loop dos contatos. Ver exemplo abaixo:
for (Pessoas)
{
for (pessoa.Telefones)
{
// mostar os telefones do contato
}
for (pessoa.Emails)
{
// mostar os emails do contato
}
}
WHAT?
esse código não faz nenhum sentido e é incompilável!
[quote="ryuuji"]
Cara, não sei como não ganhei um nobel ainda...
porque você não é um negro com nome arabe presidente dos EUA
...e nem uma cadeira.
GOSTEI 0
Douglas Eric
11/01/2012
Deveria existir prêmio nobel de programação.
Está muito mais presente no nosso dia a dia do que muita coisa q ganha premio nobel...
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="llutti"]
Você compilou seu último código?
Para listar os telefones e email de um contato, você precisa colocar os loops dentro do loop dos contatos. Ver exemplo abaixo:
for (Pessoas)
{
for (pessoa.Telefones)
{
// mostar os telefones do contato
}
for (pessoa.Emails)
{
// mostar os emails do contato
}
}
WHAT?
esse código não faz nenhum sentido e é incompilável!
[quote="ryuuji"]
Cara, não sei como não ganhei um nobel ainda...
porque você não é um negro com nome arabe presidente dos EUA
...e nem uma cadeira.
Minha genialidade é demais para os fools!
Aqueles que o Mr. T tem pena...
GOSTEI 0
Luciano Cargnelutti
11/01/2012
O código eu postei antes nao era para compilar, era apenas mostrar a lógica a ser seguida, pois eu pensei que o Murilo deveria ver o que ele fez de errado e mostrar a lógica, mas segue o código pronto:
public void listar(){
int a = pessoas.size();
System.out.println("A agenda tem "+a+" número(s) cadastrado(s)!");
System.out.println("===========================");
for (Pessoa p : pessoas)
{
System.out.println(p.getNome());
System.out.println("== Telefones (" + p.getTelefones().size() + ") ===========");
for (String q : p.getTelefones()){
System.out.println(q);
}
System.out.println("== E-mails (" + p.getEmails().size() + ")===========");
for (String r : p.getEmails()){
System.out.println(r);
}
}
msgVoltar();
}
GOSTEI 0
Luciano Cargnelutti
11/01/2012
AAA vei, o pc travou denovo e a porra do código sumiu novamente ¬¬ puta raiva... Vou tirar uma semana de ferias FUI
GOSTEI 0
Murilo Lopes
11/01/2012
Pow, gostei tanto do tópico que até me cadastrei... to lendo e tentando fazer aqui (to na quinta página) quando eu alcançar vocês posto meus resultados.
PS: tbm não sei mt de Java não, aprendi a desenvolver só em C, por causa da faculdade, mas nada muito brilhante, no máximo listas, pilhas, filas (com ponteiros)
GOSTEI 0
Murilo Lopes
11/01/2012
[quote="Murilo Lilo"]AAA vei, o pc travou denovo e a porra do código sumiu novamente ¬¬ puta raiva... Vou tirar uma semana de ferias FUI
Eu tenho uma mania meio chata, mas que acaba sendo muito útil!
Toda vez que escrevo QUALQUER COISA no código, assim que eu paro de escrever a linha e vou passar para o proximo passo, eu, automaticamente(Leia-se: sem eu mesmo perceber), aperto CTRL+S.
Isso salva sua classe no estado atual. Muito útil. Você deveria tentar.
GOSTEI 0
Marcus Santos
11/01/2012
Quer saber? Esse tópico vai ser fixo, vai servir como exemplo pra muito no-- err, iniciantes!
GOSTEI 0
Marcus Santos
11/01/2012
[quote="sekkuar"]Quer saber? Esse tópico vai ser fixo
[url="http://javafree.uol.com.br/viewtopic.jbb?t=884651&page=3#216706"]Eu já sabia[/url]!!!
GOSTEI 0
Douglas Eric
11/01/2012
public void addTelefone(String telefone) {
this.telefones.add(telefone); // <--- essa linha tá errada?
}
public void addEmail(String email) {
this.emails.add(email);
}
public Pessoa(String nome, String telefone, String email){
setNome(nome);
addTelefone(telefone);
addEmail(email);
}
Já achei... tava faltando pouquinha coisa, só deixei de instanciar a bagaça ^^
public Pessoa(String nome, String telefone, String email){
setNome(nome);
telefones = new ArrayList<String>();
addTelefone(telefone);
emails = new ArrayList<String>();
addEmail(email);
}
GOSTEI 0
Anderson Souza
11/01/2012
Muito bom esse tópico.
Estava procurando alguma coisa parecida e esse me surpreendeu.
Estudo java ha um ano, mas só agora consegui me dedicar.
E acabei por recomeçar tudo de novo.
To doido pra começar a fazer essa agenda.
Mas no momento estou bem ocupado criando um sisteminha de banco.
E ja estou alterando todo o código com as dicas desse tópico.
E ta ficando muito bom, bem mais limpo e facil de entender.
Espero que não parem, e logo eu começo minha agenda.
Flw
GOSTEI 0
Mathews Motta
11/01/2012
Nossa...
Foi só virar fixo... :shock:
GOSTEI 0
Anderson Souza
11/01/2012
[quote="MathewsMotta"]Nossa...
Foi só virar fixo... :shock:
Os no... iniciantes não sabem usar o "Recentes" igual "nois". XD
*uso só o Recentes. É minha Home*
GOSTEI 0
Anderson Souza
11/01/2012
[quote="ryuuji"][quote="MathewsMotta"]Nossa...
Foi só virar fixo... :shock:
Os no... iniciantes não sabem usar o "Recentes" igual "nois". XD
*uso só o Recentes. É minha Home*
Minha home é uma [url=http://thefuckingweather.com/earthfriendly.php?zipcode=sorocaba+br&CELSIUS=yes]pagina de previsão do tempo.[/url]
GOSTEI 0
Douglas Eric
11/01/2012
Nem tinha visto que era fixo
acompanho esse tópico ha dias ja
e só agora tomei vergonha na cara e me registrei.
GOSTEI 0
Anderson Souza
11/01/2012
[quote="sekkuar"][quote="ryuuji"][quote="MathewsMotta"]Nossa...
Foi só virar fixo... :shock:
Os no... iniciantes não sabem usar o "Recentes" igual "nois". XD
*uso só o Recentes. É minha Home*
Minha home é uma [url=http://thefuckingweather.com/earthfriendly.php?zipcode=sorocaba+br&CELSIUS=yes]pagina de previsão do tempo.[/url]
[quote="FUCKING WEATHER"]
27°?!
[size=24][b]ITS FUCKING HOT[/b][/size]
[size=15][i]Looked in the fridge this morning for some eggs. They're already cooked.[/i][/size]
Gostei da parte em itálico...
EDIT: AhuAhUAhUAHA, peguei uma que dizia assim: "Nem TEFLON me faria NÃO grudar nesse assento!"
GOSTEI 0
Kelvin Bianchi
11/01/2012
No seu método [color=blue]toString()[/color], evite utilizar concatenações com "+", faça o método desta forma:
@Override
public String toString(){
StringBuilder objetoStringBuilder = new StringBuilder();
objetoStringBuilder.append("Seu dado: ");
objetoStringBuilder.append(getSeuDado());
return objetoStringBuilder.toString();
}
Porquê? Pois assim, você melhora a performance do seu programa, tornando-o mais eficiente.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="kbianchi"]No seu método [color=blue]toString()[/color], evite utilizar concatenações com "+", faça o método desta forma:
@Override
public String toString(){
StringBuilder objetoStringBuilder = new StringBuilder();
objetoStringBuilder.append("Seu dado: ");
objetoStringBuilder.append(getSeuDado());
return objetoStringBuilder.toString();
}
Porquê? Pois assim, você melhora a performance do seu programa, tornando-o mais eficiente.
é praticamente a mesma coisa que fazendo com o "+", só mais difícil de ler! O compilador faz exatamente isso.
A solução com o StringBuilder só é vantagem num laço com muitas interações, se ele for criado fora do laço, em vez de a cada interação.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="simu"][quote="kbianchi"]No seu método [color=blue]toString()[/color], evite utilizar concatenações com "+", faça o método desta forma:
@Override
public String toString(){
StringBuilder objetoStringBuilder = new StringBuilder();
objetoStringBuilder.append("Seu dado: ");
objetoStringBuilder.append(getSeuDado());
return objetoStringBuilder.toString();
}
Porquê? Pois assim, você melhora a performance do seu programa, tornando-o mais eficiente.
é praticamente a mesma coisa que fazendo com o "+", só mais difícil de ler! O compilador faz exatamente isso.
A solução com o StringBuilder só é vantagem num laço com muitas interações, se ele for criado fora do laço, em vez de a cada interação.
Então...
StringBuilder b = new StringBuilder();
for(int i = 0; i< 100;i++){
b.append(i).append(",");
}
é melhor que
String s = "";
for(int i = 0; i< 100;i++){
s+=i+",";
}
por que?
EDIT:
Não responda! deixa eu ver se eu descobri.
Quando você faz
ele vai criar um StringBuilder e retornar o valor a cada iteração.
Então na verdade ele cria um StringBuilder, retorna o valor e coloca ele na String.
na proxima iteração de novo e de novo?
o mesmo que
s = new StringBuilder(s).append(i).append(",").toString();
é isso que ele faz?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="simu"][quote="kbianchi"]No seu método [color=blue]toString()[/color], evite utilizar concatenações com "+", faça o método desta forma:
@Override
public String toString(){
StringBuilder objetoStringBuilder = new StringBuilder();
objetoStringBuilder.append("Seu dado: ");
objetoStringBuilder.append(getSeuDado());
return objetoStringBuilder.toString();
}
Porquê? Pois assim, você melhora a performance do seu programa, tornando-o mais eficiente.
é praticamente a mesma coisa que fazendo com o "+", só mais difícil de ler! O compilador faz exatamente isso.
A solução com o StringBuilder só é vantagem num laço com muitas interações, se ele for criado fora do laço, em vez de a cada interação.
Então...
StringBuilder b = new StringBuilder();
for(int i = 0; i< 100;i++){
b.append(i).append(",");
}
é melhor que
String s = "";
for(int i = 0; i< 100;i++){
s+=i+",";
}
por que?
quem afirmou que é melhor?
100 são poucas interações... mas a idéia é essa mesmo
O segundo código, de qualquer forma, vai criar pelo menos um StringBuilder e uma nova String a cada interação.
EDIT:
(tarde demais... já respondi)
o correto usando Java 7 é
s = new StringBuilder(String.valueOf(s)).append(i).append(",").toString();
mas isso é detalhe de implementação
[[]]
GOSTEI 0
Anderson Souza
11/01/2012
[quote="sekkuar"][quote="simu"][quote="kbianchi"]No seu método [color=blue]toString()[/color], evite utilizar concatenações com "+", faça o método desta forma:
@Override
public String toString(){
StringBuilder objetoStringBuilder = new StringBuilder();
objetoStringBuilder.append("Seu dado: ");
objetoStringBuilder.append(getSeuDado());
return objetoStringBuilder.toString();
}
Porquê? Pois assim, você melhora a performance do seu programa, tornando-o mais eficiente.
é praticamente a mesma coisa que fazendo com o "+", só mais difícil de ler! O compilador faz exatamente isso.
A solução com o StringBuilder só é vantagem num laço com muitas interações, se ele for criado fora do laço, em vez de a cada interação.
Então...
StringBuilder b = new StringBuilder();
for(int i = 0; i< 100;i++){
b.append(i).append(",");
}
é melhor que
String s = "";
for(int i = 0; i< 100;i++){
s+=i+",";
}
por que?
EDIT:
Não responda! deixa eu ver se eu descobri.
Quando você faz
ele vai criar um StringBuilder e retornar o valor a cada iteração.
Então na verdade ele cria um StringBuilder, retorna o valor e coloca ele na String.
na proxima iteração de novo e de novo?
o mesmo que
s = new StringBuilder(s).append(i).append(",").toString();
é isso que ele faz?
Exato! Com o operador "+", a cada iteração, um novo objeto [b]String[/b] é criado na memória, o que requer uma nova alocação de espaço para esse novo objeto.
O [color=blue]StringBuilder[/color] modifica a [b]String[/b] sem ter de criar um novo objeto.
GOSTEI 0
Anderson Souza
11/01/2012
[quote="kbianchi"][quote="sekkuar"]
[...]
Então...
StringBuilder b = new StringBuilder();
for(int i = 0; i< 100;i++){
b.append(i).append(",");
}
é melhor que
String s = "";
for(int i = 0; i< 100;i++){
s+=i+",";
}
por que?
EDIT:
Não responda! deixa eu ver se eu descobri.
Quando você faz
ele vai criar um StringBuilder e retornar o valor a cada iteração.
Então na verdade ele cria um StringBuilder, retorna o valor e coloca ele na String.
na proxima iteração de novo e de novo?
o mesmo que
s = new StringBuilder(s).append(i).append(",").toString();
é isso que ele faz?
Exato! Com o operador "+", a cada iteração, um novo objeto [b]String[/b] é criado na memória, o que requer uma nova alocação de espaço para esse novo objeto.
O [color=blue]StringBuilder[/color] modifica a [b]String[/b] sem ter de criar um novo objeto.
não é bem assim - String é imutável - o StringBuilder não altera a String.
O método [color=blue]toString[/color] do StringBuilder vai criar uma nova String.
Mais uma vez: o compilador vai transformar a expressão com "+" em uma com StringBuilder (e o [color=blue]toString[/color])
A diferença é apenas onde e quantas instâncias de StringBuilder são usadas e quantas vezes o método [color=blue]toString[/color] dele é chamado.
GOSTEI 0
Douglas Eric
11/01/2012
Fiz um aqui, o que acham?
@Override
public String toString() {
StringBuilder b = new StringBuilder();
String e=(""), t=("");
b.insert(0, getNome());
int c;
if (telefones.size()>emails.size())
c = telefones.size();
else c = emails.size();
for (int i=0;i<c;i++){
try {
t=telefones.get(i);
} catch (IndexOutOfBoundsException ignore){
t=("");
}
try {
e=emails.get(i);
} catch (IndexOutOfBoundsException ignore) {
e=("");
}
if (t.equals(""))
b.append("\t");
b.append("\t\t");
b.append(t);
b.append("\t");
b.append(e);
b.append("\n");
}
return b.toString();
}
GOSTEI 0
Douglas Eric
11/01/2012
Não gostei nem um pouco de ignorar as exceptions da arraylist
GOSTEI 0
Douglas Eric
11/01/2012
eu ainda não peguei o jeito das exceptions não, coloquei aquelas ali p/ passar batido só, tenho que aprender a usar direito :D
GOSTEI 0
Douglas Eric
11/01/2012
Qual a melhor forma de tratar aquele problema ali?
Essa exception acontece quando eu tenho mais emails do que telefones e vice-versa, por eu estar usando o mesmo contador para os dois ele acaba pegando um índice que existe p/ um e não existe p/ outro...
GOSTEI 0
Marcus Santos
11/01/2012
[quote="mvls1"]Qual a melhor forma de tratar aquele problema ali?
Essa exception acontece quando eu tenho mais emails do que telefones e vice-versa, por eu estar usando o mesmo contador para os dois ele acaba pegando um índice que existe p/ um e não existe p/ outro...
O certo seria percorrer cada lista individualmente, cada uma no seu tamanho certo.
GOSTEI 0
Douglas Eric
11/01/2012
@Override
public String toString() {
StringBuilder b = new StringBuilder();
String e = (""), t = ("");
int c;
b.append(getNome());
if (telefones.size()>emails.size())
c = telefones.size();
else c = emails.size();
for (int i=0;i<c;i++){
if (i<telefones.size()) //troquei o try-catch
t=telefones.get(i);
else t= ("");
if (i<emails.size()) //troquei o try-catch
e=emails.get(i);
else e= ("");
if (t == (""))
b.append("\t");
b.append("\t\t");
b.append(t);
b.append("\t");
b.append(e);
b.append("\n");
}
return b.toString();
}
Bom só desviei do problema, mas pelo menos não estou mais ignorando a exception. Ainda vou ver se consigo pensar em saídas melhores.
GOSTEI 0
Marcus Santos
11/01/2012
Não mudou nada.
Pra que ter um for só?
faça dois laços, um para cada lista!
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"]Não mudou nada.
Pra que ter um for só?
faça dois laços, um para cada lista!
foi minha primeira tentativa, só que for dentro de for ele me dá:
fone1 email1
email2
fone2 email1
email2
e for separados sai:
fone1
fone2
email1
email2
e com um só eu tenho:
nome fone1 email1
fone2 email2
GOSTEI 0
Douglas Eric
11/01/2012
[quote="mvls1"]Qual a melhor forma de tratar aquele problema ali?
Essa exception acontece quando eu tenho mais emails do que telefones e vice-versa, por eu estar usando o mesmo contador para os dois ele acaba pegando um índice que existe p/ um e não existe p/ outro...
no MÍNIMO faz
...
} catch (???Exception ex) {
ex.printStackTrace();
}
...
caso contrário, quando ocorrer um erro, não vai saber qual o erro e onde ocorreu.
Como o sekkuar escreveu, o melhor é programar de maneira que a Exception seja a exceção [:-[b][/b])
GOSTEI 0
Marcus Santos
11/01/2012
[quote="simu"]
Como o sekkuar escreveu, o melhor é programar de maneira que a Exception seja a exceção.
'-'
Quem poderia imaginar???? ahuehauhes
GOSTEI 0
Douglas Eric
11/01/2012
[quote="MathewsMotta"][quote="simu"]
Como o sekkuar escreveu, o melhor é programar de maneira que a Exception seja a exceção.
'-'
Quem poderia imaginar???? ahuehauhes
faltou o [size=18][b][:-[u][/u])[/b][/size] no fim da citação
GOSTEI 0
Douglas Eric
11/01/2012
alguem conseguiu com dois laços independentes conforme o sekkuar falou ali? cheguei agora do trampo ainda vou tentar mais ^^
GOSTEI 0
Douglas Eric
11/01/2012
Outra tentativa:
@Override
public String toString() {
StringBuilder b = new StringBuilder();
String e = (""), t = ("");
int c, cont=0, maior;
b.append(getNome());
//DESCOBRE QUAL A MAIOR LISTA
c = telefones.size();
if (telefones.size()>emails.size())
maior = 1;
else if (telefones.size()<emails.size()){
c = emails.size();
maior = 2;
} else maior = 0;
//TRATAMENTOS DIFERENCIADOS DEPENDENDO DA QTDE DE DADOS EM CADA LISTA
switch (maior) {
case 1:
for (int i=0; i<c;i++){
t=telefones.get(i);
b.append("\t\t");
b.append(t);
b.append("\t");
if (cont<emails.size()){
e=emails.get(cont);
b.append(e);
}
b.append("\n");
cont++;
}
break;
case 2:
for (int i=0; i<c;i++){
b.append("\t\t");
if (cont<telefones.size()){
t=telefones.get(cont);
b.append(t);
b.append("\t");
} else b.append("\t\t");
e=emails.get(i);
b.append(e);
b.append("\n");
cont++;
}
break;
default:
for (int i=0; i<c;i++){
t=telefones.get(i);
e=emails.get(i);
b.append("\t\t");
b.append(t);
b.append("\t");
b.append(e);
b.append("\n");
}
break;
}
return b.toString();
}
Ainda através de If, mas agora acredito estar percorrendo as ArrayLists de forma correta.
GOSTEI 0
Douglas Eric
11/01/2012
Tentando entender try-catch, é mesmo interessante fazer isso aqui?
System.out.println("Qual contato deseja Alterar?");
try {
index = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException nfe) {
throw new NumberFormatException ("Você DEVE digitar um número.");
}
Pessoa p = tempLista.get(index);
GOSTEI 0
Marcus Santos
11/01/2012
[quote="mvls1"]Tentando entender try-catch, é mesmo interessante fazer isso aqui?
System.out.println("Qual contato deseja Alterar?");
try {
index = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException nfe) {
throw new NumberFormatException ("Você DEVE digitar um número.");
}
Pessoa p = tempLista.get(index);
quase interessante - praticamente mudou a mensagem da Exception (e o local de onde ela foi criada). Em princípio - nesse caso - poderia deixar sem try-catch já que está criando o mesmo tipo de Exception.
Normalmente se deve [i]incluir[/i] a Exception original na nova:
} catch (NumberFormatException nfe) {
NumberFormatException ex = new NumberFormatException ("Você DEVE digitar um número.");
ex.initCause(nfe);
throw new ex;
}
ou
} catch (NumberFormatException nfe) {
throw (NumberFormatException) new NumberFormatException ("Você DEVE digitar um número.").initCause(nfe);
}
Resumo: não faz sentido criar uma nova Exception do mesmo tipo, a não ser para mudar a mensagem (necessário?), mas a mudança do tipo, isto é, criar uma Exception de outro tipo po de ser necessário/desejado. De qualquer maneira se deve incluir a Exception original como causa da nova!
Exemplo: um método que joga uma SQLException em caso de erro relacionado com acesso ao Banco de Dados:
public int getValor() {
String valor = pegarValor(); // pode jogar uma SQLException
try {
int resultado = Integer.parseInt(valor);
return resultado;
} catch (NumberFormatException nfe) {
throw (SQLException) new SQLException("formato inválido de valor").initCause(nfe);
}
}
GOSTEI 0
Douglas Eric
11/01/2012
Mais mudanças no código, acertei a parte de ler e salvar em arquivo txt combinado com os arraylists p/ emails e telefones...
Classe Arquivo
public class Arquivo {
public static void salvar(ArrayList<Pessoa> Lista) {
try {
File file = new File("Lista.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for (Pessoa p: Lista) {
String s = p.getLinha();
bw.write(s);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ler(ArrayList<Pessoa> Lista) {
try {
File file = new File("Lista.txt");
if (file.exists()){
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while (s !=null){
ArrayList<String> temp1 = new ArrayList();
ArrayList<String> temp2 = new ArrayList();
String[] dados = s.split(";");
String[] tels = dados[1].split(",");
String[] mails = dados[2].split(",");
temp1.addAll(Arrays.asList(tels));
temp2.addAll(Arrays.asList(mails));
Pessoa p = new Pessoa("", "", "");
p.LoadPessoa(dados[0], temp1, temp2);
Lista.add(p);
s = br.readLine();
}
} else return;
} catch (IOException e) {
e.printStackTrace(); // <- Queria saber pq o NetBeans fica mandando retirar esse "Throwable"
}
}
}
Classe Agenda
public void Encerrar() {
Arquivo.salvar(Lista);
}
Classe Pessoa
public String getTelefones() {
String tel = ("");
for (String t : telefones)
if (tel==(""))
tel+= t;
else tel+=","+ t;
tel+=";";
return tel;
}
public String getEmails() {
String mail = ("");
for (String t : emails)
if (mail==(""))
mail+= t;
else mail+=","+ t;
mail+=";";
return mail;
}
public String getLinha(){
linha = getNome()+";"+getTelefones()+getEmails();
return linha;
}
public Pessoa(String nome, String telefone, String email){
setNome(nome);
telefones = new ArrayList<String>();
addTelefone(telefone);
emails = new ArrayList<String>();
addEmail(email);
}
public void LoadPessoa(String nome, ArrayList<String> tels, ArrayList<String> mails){
setNome(nome);
telefones = tels;
emails = mails;
}
Tem mais coisa nas classes, mas não tem necessidade postar tudo, ia ficar grande demais, ninguem vai querer ler tudão :razz:
GOSTEI 0
Douglas Eric
11/01/2012
[quote="mvls1"]
[...]
[...]
e.printStackTrace(); // <- Queria saber pq o NetBeans fica mandando retirar esse "Throwable"
[...]
[...]
Se você quer saber eu te conto!
O Netbeans manda tirar esse Throwable pois ele (normalmente) não fica no código final e só é usado no desenvolvimento.
Ex: Digamos que você quer desenvolver esse software para uma loja e fez tudo certinho. Quando for entregar, não vai deixar uma "printStackTrace()", pois o usuário não vai ter um console para ver (e não vai entender o que aquela coisa cheia de letras significa).
No código final normalmente vai um aviso/tratamento daquela exceção para que o sistema consiga se recuperar dela ou pelo menos avisar o usuário que houve algum problema.
Sacou?
GOSTEI 0
Marcus Santos
11/01/2012
[quote="ryuuji"][quote="mvls1"]
[...]
[...]
e.printStackTrace(); // <- Queria saber pq o NetBeans fica mandando retirar esse "Throwable"
[...]
[...]
Se você quer saber eu te conto!
O Netbeans manda tirar esse Throwable pois ele (normalmente) não fica no código final e só é usado no desenvolvimento.
Ex: Digamos que você quer desenvolver esse software para uma loja e fez tudo certinho. Quando for entregar, não vai deixar uma "printStackTrace()", pois o usuário não vai ter um console para ver (e não vai entender o que aquela coisa cheia de letras significa).
No código final normalmente vai um aviso/tratamento daquela exceção para que o sistema consiga se recuperar dela ou pelo menos avisar o usuário que houve algum problema.
Sacou?
E só pra constar: o Netbeans não "manda" nada. Ele "sugere".
Você manda na IDE, e não o contrário.
GOSTEI 0
Douglas Eric
11/01/2012
[quote="sekkuar"][quote="ryuuji"][quote="mvls1"]
[...]
[...]
e.printStackTrace(); // <- Queria saber pq o NetBeans fica mandando retirar esse "Throwable"
[...]
[...]
Se você quer saber eu te conto!
O Netbeans manda tirar esse Throwable pois ele (normalmente) não fica no código final e só é usado no desenvolvimento.
Ex: Digamos que você quer desenvolver esse software para uma loja e fez tudo certinho. Quando for entregar, não vai deixar uma "printStackTrace()", pois o usuário não vai ter um console para ver (e não vai entender o que aquela coisa cheia de letras significa).
No código final normalmente vai um aviso/tratamento daquela exceção para que o sistema consiga se recuperar dela ou pelo menos avisar o usuário que houve algum problema.
Sacou?
E só pra constar: o Netbeans não "manda" nada. Ele "sugere".
Você manda na IDE, e não o contrário.
Sei...
O meu manda mesmo. Configurei para aparecer essa "sugestão" como erro. Assim eu não esqueço de tirar no código final.
Pretty smart, huh?
GOSTEI 0
Douglas Eric
11/01/2012
[quote="ryuuji"]Sei...
O meu manda mesmo. Configurei para aparecer essa "sugestão" como erro. Assim eu não esqueço de tirar no código final.
Pretty smart, huh?
Você mandou o seu IDE mandar em você o_O
Isso está parecendo história bíblica....
GOSTEI 0
Mathews Motta
11/01/2012
[quote="sekkuar"]Você manda na IDE, e não o contrário.
De acordo com a contagem do simu, esse quadro está mudando a cada segundo!!
GOSTEI 0
Marcus Santos
11/01/2012
[quote="sekkuar"]Você mandou o seu IDE mandar em você o_O
Isso está parecendo história bíblica....
Sou foda! *dancinha*
GOSTEI 0
Douglas Eric
11/01/2012
valeu pela explicação ryuuji ^^
sekkuar, mandar ele até manda, não quer dizer q eu obedeça =P
vou continuar mexendo no programa, mas vou esperar o dono do tópico voltar antes de postar mais coisas, senão acabo atrapalhando ele
GOSTEI 0
Douglas Eric
11/01/2012
[quote="mvls1"]valeu pela explicação ryuuji ^^
sekkuar, mandar ele até manda, não quer dizer q eu obedeça =P
vou continuar mexendo no programa, mas vou esperar o dono do tópico voltar antes de postar mais coisas, senão acabo atrapalhando ele
não manda não.
Sublinhado vermelho = erro ==>conserte
Sublinhado amarelo = aviso ==> warning, preste atenção.
GOSTEI 0
Douglas Eric
11/01/2012
Ficou bom esse?
public int getNum() {
int n;
try {
n = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException nfe) {
System.out.println("Caractere inválido.");
msgVoltar();
n=-2; //trata o problema da entrada incorreta letras/branco
}
return n;
}
Arquivo.java = funcionando
Pessoa.java Métodos:
String toString
printTelefones Imprime os telefones e seus índices
printEmails Imprime os emails e seus índices
getNome Retorna o nome
getTelefones Retorna uma string com todos os telefones de uma pessoa, separados por (,) finalizada com (;)
getEmails Retorna uma string com todos os emails de uma pessoa, separados por (,) finalizada com (;)
getLinha retorna uma linha com o nome, todos os telefones e emails de uma pessoa com separação (,) e (;)
setNome Grava o nome da pessoa
addTelefone Adiciona um novo Telefone à lista da pessoa
addEmail Adiciona um novo email à lista da pessoa
setTelefone Modifica um numero de Telefone constante da lista da pessoa
setEmail Modifica um endereço de email constante da lista da pessoa
remTelefone Apaga um telefone da lista da pessoa
remEmail Apaga um email da lista da pessoa
LoadPessoa Carrega todos os dados de uma pessoa que esteja no arquivo Lista.txt
Agenda.java Métodos:
Cadastra
Procura
Lista Todos
Apaga Pessoa
Altera Pessoa
1 nome
2 telefone
21 inclui
22 modifica
23 exclui
3 email
31 inclui
32 modifica
33 exclui
Fiz até aí... Esqueci de fazer alguma coisa?
GOSTEI 0
Murilo Lopes
11/01/2012
OIA EU DENOVO =D
GOSTEI 0
Marcus Santos
11/01/2012
[quote="Murilo Lilo"]OIA EU DENOVO =D
[img]http://javafree.uol.com.br/files_user/files/5/1B/9C/porra.gif[/img]
GOSTEI 0
Murilo Lopes
11/01/2012
Agora a parada é diferente, eu tenho um projeto pra fazer na faculdade e to interessado em fazer um aplicativo pra Android, já tenho tudo funcionando bonitinho, só falta digitar o código...
A parada é a seguinte, to afim de fazer essa famosa lista telefonica só que pelo jeito vai ter que ser com GUI alguém tá afim de ajudar?
GOSTEI 0
Murilo Ângelo
11/01/2012
[quote="Murilo Lilo"]Aff cara, que cagada... Era pra ser uma MP... Sorry
Sou novo no fórum e posso dizer que nada sei de Java alguém pode me ajudar por onde devo começar,nunk desenvolvi nada sei muito pouco,aliás sei em que se ultiliza mas como se faz é oq quero saber podem me ajudar?Preciso saber por onde como oq lêr para começar !
GOSTEI 0
Douglas Eric
11/01/2012
[quote="caio.lode"][quote="Murilo Lilo"]Aff cara, que cagada... Era pra ser uma MP... Sorry
Sou novo no fórum e posso dizer que nada sei de Java alguém pode me ajudar por onde devo começar,nunk desenvolvi nada sei muito pouco,aliás sei em que se ultiliza mas como se faz é oq quero saber podem me ajudar?Preciso saber por onde como oq lêr para começar !
comece da página 1.
GOSTEI 0
Marcus Santos
11/01/2012
[quote="Murilo Lilo"] já tenho tudo funcionando bonitinho, só falta digitar o código...
[Sarcástico Mode]
Ah, mas esse detalhe é rapidinho...
Deixe perfeito sem GUI. GUI é o de menos, pensa na sua aplicação funcionando perfeitamente primeiro cara...
GOSTEI 0
Marcus Santos
11/01/2012
[quote="Murilo Lilo"]Começando agora, só me dê mais informações, se existir, ou ela também só ouvir "Agenda telefônica"?
Por onde começar?
GOSTEI 0
Marcus Santos
11/01/2012
[quote="debora.paulo"][quote="Murilo Lilo"]Começando agora, só me dê mais informações, se existir, ou ela também só ouvir "Agenda telefônica"?
Por onde começar?
Não entendi sua pergunta... Elabore melhor o que quer saber.
GOSTEI 0
Maisa Franco
11/01/2012
Olá pessoal estou realizando meu 1º projeto em java para desktop e estou com dificuldades na Jtable.
Estou fazendo um Jframe para vendas usando uma Jtable e preciso fazer consultas o banco de dados de produtos estou usando o postgres, será que alguem pode me ajudar ...
Como faço essa consulta de produto no banco para a Jtable.
GOSTEI 0
Maisa Franco
11/01/2012
Olá pessoal estou realizando meu 1º projeto em java para desktop e estou com dificuldades na Jtable.
Estou fazendo um Jframe para vendas usando uma Jtable e preciso fazer consultas o banco de dados de produtos estou usando o postgres, será que alguem pode me ajudar ...
Como faço essa consulta de produto no banco para a Jtable.
_________________
Olá estou fazendo projeto final de curso e preciso de ajuda pois estou com muitas dificuldades e necessito d ajuda.
GOSTEI 0
Job Silva
11/01/2012
sek, cara, sou novo aqui no fórum e interessado tb em continuar na luta p/ aprender java. tenho muitas dúvidas, assim como o colega Murilo Lilo e gostaria de compartilhar com vcs esse projeto da calculadora.
Tenho dificuldades tb em codificação, principalmente -passagem de parametros, métodos construtores, heranca, e os famosos set e get,
conto c/ a ajuda de todos. obrigado.
GOSTEI 0
Job Silva
11/01/2012
[quote="caio.lode"][quote="Murilo Lilo"]Aff cara, que cagada... Era pra ser uma MP... Sorry
Sou novo no fórum e posso dizer que nada sei de Java alguém pode me ajudar por onde devo começar,nunk desenvolvi nada sei muito pouco,aliás sei em que se ultiliza mas como se faz é oq quero saber podem me ajudar?Preciso saber por onde como oq lêr para começar !
Já tem muito tempo e você já deve estar muito melhor em Java, mas respondendo a sua pegunta:
Este é o melhor e está ao alcance do seu Bolso: [url]https://www.devmedia.com.br/curso/formacao-java-basico/208[/url]
[url]https://www.devmedia.com.br/curso/curso-de-java-basico-aplicacoes-desktop/367[url]
[url]http://docs.oracle.com/javase/tutorial[/url]
GOSTEI 0
Job Silva
11/01/2012
[quote="joblopes"]sek, cara, sou novo aqui no fórum e interessado tb em continuar na luta p/ aprender java. tenho muitas dúvidas, assim como o colega Murilo Lilo e gostaria de compartilhar com vcs esse projeto da calculadora.
Tenho dificuldades tb em codificação, principalmente -passagem de parametros, métodos construtores, heranca, e os famosos set e get,
conto c/ a ajuda de todos. obrigado.
Sem problemas Lopes, eu recomendo a você a Formação de Java da DevMedia, creio que você irá adorar e também vai te ajudar muito nesta base que você tanto tem dificuldade e que procura tanto melhorar e com certeza este já é um ponto a seu favor: a vontade de aprender.
Segue o link:
https://www.devmedia.com.br/curso/formacao-java-basico/208
E lembre-se: nunca desista... Einstein já dizia que a genialidade é 1% de inspiração e 99% Transpiração.
Abraços
:amigos:
GOSTEI 0
Job Silva
11/01/2012
olá pessoal meu professor passou uma atividade para criar uma agenda bem parecida com essa que foi amplamente discutida nesse fórum ei estive lendo todos os posts desse tópico e me esclareceram muitas dúvidas mais ainda tenho algumas gostaria que alguem pudesse me ajudar.
o problema é o seguinte ele quer uma agenda que guarde um nome e telefone de um contato, mas nao quer que utilize List. ele quer que usemos arrays comuns. o que eu posso fazer? posso criar uma classe contato que possui os atributos nome e telefone e depois declarar um array do tipo contato?
public class Contato {
private String nome;
private String 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;
}
// public Contato(String nome, String telefone){
// setNome(nome);
// setTelefone(telefone);
// }
}
public class Agenda {
private Contato pessoa[] = new Contato[5];
private Scanner entrada = new Scanner(System.in);
public boolean existeContato(String name) {
int cont = 0;
boolean existe = true;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == name) {
cont++;
}
}
if (cont == 0) {
existe = false;
}
if (cont == 1) {
existe = true;
}
return existe;
}
public void cadastrar() {
int cont = 0;
System.out.println("Formulário de cadastro");
System.out.println("Digite o nome");
String nome = entrada.nextLine();
System.out.println("Digite o telefone");
String telefone = entrada.nextLine();
if (existeContato(nome) == false) {
pessoa[cont].setNome(nome);
pessoa[cont].setTelefone(telefone);
cont++;
} else {
System.out.println("Nome ja cadastrado, por favor tente outro nome");
msgVoltar();
}
}// fim do método cadastrar
o primeiro código é a classe contato
no segundo eu crio um array do tipo Contato(minha classe)
no terceiro tento inseriri mas da um erro. Alguem pode me ajudar? estou baseando o codigo nessa agenda que estava sendo discutida aqui.
GOSTEI 0
Job Silva
11/01/2012
Qual o erro que está sendo lançado?
GOSTEI 0
Hidelgard
11/01/2012
Exception in thread "main" java.lang.NullPointerException
at agendatelefonica.Agenda.existeContato(Agenda.java:19)
at agendatelefonica.Agenda.cadastrar(Agenda.java:108)
at agendatelefonica.Agenda.menu(Agenda.java:136)
at agendatelefonica.Main.main(Main.java:11)
Java Result: 1
ex: quando escolho a opção 1 cadastrar ele retorna esses erros.
Isso após eu digitar nome e telefone.
Eu sei que fazer essa implementação com arraylist é bem mais fácil e prático. mas o exercicio exige que seja implementada com arrays normais.
GOSTEI 0
Carlos H
11/01/2012
[quote="bilshurato"]
Exception in thread "main" java.lang.NullPointerException
at agendatelefonica.Agenda.existeContato(Agenda.java:19)
at agendatelefonica.Agenda.cadastrar(Agenda.java:108)
at agendatelefonica.Agenda.menu(Agenda.java:136)
at agendatelefonica.Main.main(Main.java:11)
Java Result: 1
ex: quando escolho a opção 1 cadastrar ele retorna esses erros.
Isso após eu digitar nome e telefone.
Eu sei que fazer essa implementação com arraylist é bem mais fácil e prático. mas o exercicio exige que seja implementada com arrays normais.
na linha 19 de Agenda.java está tentando referenciar algum campo/método de um objeto não instanciado ([color=blue]null[/color]).
Provavelmente criou o array
mas não criou as instâncias
array[i] = new Objeto(...);
FAQ: [url="http://javafree.uol.com.br/topic-882405-FAQ-Stack-Trace.html?page=1#201698"][u]java.lang.NullPointerException[/u][/url]
GOSTEI 0
Hidelgard Silva
11/01/2012
public void cadastrar() {
int cont = 0;
System.out.println("Inserir novo contato Digite o nome");
String nome = entrada.nextLine();
System.out.println("Digite o telefone");
String telefone = entrada.nextLine();
// if (existeContato(nome) == false) {
pessoa[cont] = new Contato(); // aqui eu crio a instancia do objejeto
pessoa[cont].setNome(nome);
pessoa[cont].setTelefone(telefone);
System.out.println("Contato cadastrado com sucesso!");
cont++;
// } else {
// System.out.println("Nome ja cadastrado, por favor tente outro nome");
// msgVoltar();
// }
}// fim do método cadastrar
instanciando o objeto como o amigo falou resolvi parte do problema agora esta sendo realizado o cadastro. Mas somente se eu retirar o codigo que verifica se o contato ja esta cadastrado.
GOSTEI 0
Hidelgard Silva
11/01/2012
public boolean existeContato(String name) {
int cont = 0;
boolean existe = true;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome().equals(name)) {
cont++;
}
}
if (cont == 0) {
existe = false;
}
if (cont == 1) {
existe = true;
}
return existe;
}
nao to conseguindo enxergar onde devo criar a instancia do objeto nesse método?
GOSTEI 0
Hidelgard
11/01/2012
public boolean existeContato(String name) {
int cont = 0;
boolean existe = true;
for (int i = 0; i < pessoa.length; i++) {
pessoa[i] = new Contato(); // aqui eu estou populando o vetor
}
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == name) {
cont++;
}
}
if (cont == 0) {
existe = false;
}
if (cont == 1) {
existe = true;
}
return existe;
}
acho que essa dúvida foi resolvida. faltava popular o vetor fiz um for para instanciar um objeto para cada indice do vetor antes de verificar se o contato ja existe.
GOSTEI 0
Job Silva
11/01/2012
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package agendatelefonica;
import java.util.Scanner;
public final class Agenda {
// array do tipo Contato
private Contato pessoa[] = new Contato[5];
private Scanner entrada = new Scanner(System.in);
int id = 0;// guarda o id do array que esta sendo cadastrado
// método utilizado para iniciar o vetor e criar as instancias dos respectivo objetos
public void popularVeto() {
for (int i = 0; i < pessoa.length; i++) {
pessoa[i] = new Contato(); // aqui eu estou populando o vetor
}
}
// construtor para inicializar os valores
public Agenda() {
popularVeto();
}
// verifica se o contato ja existe
public boolean existeContato(String name) {
int cont = 0;
boolean existe = true;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == name) {
cont++;
}
}
if (cont == 0) {
existe = false;
}
if (cont == 1) {
existe = true;
}
return existe;
}
// apaga um contato
public void apagar() {
System.out.println("Informe o nome que deseja apagar");
String nome = entrada.nextLine();
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == nome) {
pessoa[i].setNome(null);
System.out.println("Cadastro apagado com sucesso!");
break;
} else {
System.out.println("Esse contato nao existe");
}
}
msgVoltar();
}// fim do método apagar
public void msgVoltar() {
String opc;
System.out.println("Tecle Enter para voltar!");
opc = entrada.nextLine();
}// fim do método msgVoltar
// procura um contato
public void procurar() {
System.out.println("Pesquisar contato,Digite o nome ou telefone.");
String nomeTelefone = entrada.nextLine();
for (int i = 0; i < pessoa.length; i++) {
if ((pessoa[i].getNome() == nomeTelefone) || (pessoa[i].getTelefone() == nomeTelefone)) {
System.out.println("Nome " + pessoa[i].getNome() + " Telefone " + pessoa[i].getTelefone());
}
}
msgVoltar();
}
// altera um contato
public void alterar() {
int cont = 0;
int index;
Contato pessoaTemp[] = new Contato[pessoa.length];
System.out.println("Digite o nome que está procurando");
String nome = entrada.nextLine();
for (int i = 0; i < pessoa.length; i++) {
pessoaTemp[i] = new Contato();
if (pessoa[i].getNome() == nome) {
System.out.println(cont + "º Nome " + pessoa[i].getNome() + " Telefone " + pessoa[i].getTelefone());
cont++;
pessoaTemp[i].setNome(pessoa[i].getNome());
pessoaTemp[i].setTelefone(pessoa[i].getTelefone());
}
}
System.out.println("A busca encontrou " + cont + " nome(s).");
System.out.println("Escolha qual dos registros deseja alterar:");
index = Integer.parseInt(entrada.nextLine());
if ((index >= 0) && (index < pessoaTemp.length)) {
int opc;
do {
System.out.println("O que deseja alterar?\n 1 - NOME\n 2 - TELEFONE\n 0 - Encerrar alteração");
opc = Integer.parseInt(entrada.nextLine());
switch (opc) {
case 1:
System.out.println("Digite o novo nome do cadastro..");
String nom = entrada.nextLine();
pessoaTemp[index].setNome(nom);
break;
case 2:
System.out.println("Digite o novo número de telefone do cadastro.");
String tel = entrada.nextLine();
pessoaTemp[index].setTelefone(tel);
break;
case 0:
msgVoltar();
break;
}
} while (opc != 0);
} else {
System.out.println("Codigo da pessoa invalido");
}
}// fim do método alterar
// cadastra um contato
public void cadastrar() {
System.out.println("Inserir novo contato Digite o nome");
String nome = entrada.nextLine();
System.out.println("Digite o telefone");
String telefone = entrada.nextLine();
if (existeContato(nome) == false) {
pessoa[id].setNome(nome);
pessoa[id].setTelefone(telefone);
System.out.println("Contato cadastrado com sucesso!");
id++;
} else {
System.out.println("Nome ja cadastrado, por favor tente outro nome");
msgVoltar();
}
}// fim do método cadastrar
public void menu() {
int opc;
// Arquivo.ler(pessoas);
do {
System.out.println(" ================================================ ");
System.out.println("| Agenda Telefônica |");
System.out.println(" ================================================ ");
System.out.println("| 1 - Inserir novo contato |");
System.out.println("| 2 - Pesquisar um contato pelo nome ou telefone |");
System.out.println("| 3 - Editar um contato |");
System.out.println("| 4 - Apagar um contato |");
System.out.println("| 0 - Sair do programa |");
System.out.println(" ================================================ ");
opc = Integer.parseInt(entrada.nextLine());
switch (opc) {
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
alterar();
break;
case 4:
apagar();
break;
case 0:
// Arquivo.salvar(pessoas);
break;
}
} while (opc != 0);
}
}
pessoal ta ai todo o meu código mas infelizmente nada ta funcionando. Como ja falei anteriormente estou adptando a agenda desenvolvida nesse topico para usar array comuns ao inves de arraylist(exigencia do professor). Preciso de ajuda não quero o codigo feito mas ja me perdi todo no codigo.
GOSTEI 0
Hidelgard
11/01/2012
// verifica se o contato ja existe
public boolean existeContato(String name) {
int cont = 0;
boolean existe = true;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == name) { //essa comparação estava //errada
cont++;
}
}
if (cont == 0) {
existe = false;
}
if (cont == 1) {
existe = true;
}
return existe;
}
public boolean existeContato(String name) {
boolean existe = false;
for (int i = 0; i < pessoa.length; i++) {
// o compilador me deu essa solução e o erro foi corrgigo
if (pessoa[i].getNome() == null ? name == null : pessoa[i].getNome().equals(name)) {
existe = true;
break;
}
System.out.println("O contato nao existe");
}
return existe;
}
alguem pode me explicar o que foi feito com essa correção no codigo? eu nao entendi embora agora o codigo esteja funcionando perfeitamente.
GOSTEI 0
Job Silva
11/01/2012
[/b]minha classe principal[b]
package agendatelefonica;
public class Main {
public static void main(String[] args) {
Agenda minhaAgenda = new Agenda();
minhaAgenda.menu();
}
}
[/b]classe Contao[b]
package agendatelefonica;
public class Contato {
private String nome;
private String 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;
}
}
[/b]classe Agenda[b]
package agendatelefonica;
import java.util.Scanner;
public class Agenda {
// array do tipo Contato
private Contato pessoa[] = new Contato[5];
private Scanner entrada = new Scanner(System.in);
int id;// guarda o id do array que esta sendo cadastrado
// método utilizado para iniciar o vetor e criar as instancias dos respectivo objetos
public void popularVeto() {
for (int i = 0; i < pessoa.length; i++) {
pessoa[i] = new Contato(); // aqui eu estou populando o vetor
}
id = 0;
}
// construtor para inicializar os valores
public Agenda() {
popularVeto();
}
// verifica se o contato ja existe
public boolean existeContato(String name) {
boolean existe = false;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == null ? name == null : pessoa[i].getNome().equals(name)) {
existe = true;
break;
}
System.out.println("O contato nao existe");
}
return existe;
}
// apaga um contato
public void apagar() {
int cont = 0;
boolean encontrou = false;
System.out.println("Apagar contato, digite o nome do contato.");
String nome = entrada.nextLine();
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == null ? nome == null : pessoa[i].getNome().equals(nome)) {
encontrou = true;
cont = i;
break;
}
}
if (encontrou == true) {
int opc;
System.out.println("Digite 5 para confirmar se realmente quer apagar " + pessoa[cont].getNome() + " , " + pessoa[cont].getTelefone());
opc = entrada.nextInt();
switch (opc) {
case 5:
pessoa[cont].setNome(null);
pessoa[cont].setTelefone(null);
System.out.println("Contato apagado com sucesso!");
break;
default:
break;
}
} else {
System.out.println("Contato inexistente.");
}
msgVoltar();
}// fim do método apagar
public void msgVoltar() {
String opc;
System.out.println("Tecle Enter para voltar!");
opc = entrada.nextLine();
}// fim do método msgVoltar
// procura um contato
public void procurar() {
System.out.println("Pesquisar contato,Digite o nome ou telefone.");
String nomeTelefone = entrada.nextLine();
boolean existe = false;
for (int i = 0; i < pessoa.length; i++) {
if ((pessoa[i].getNome() == null ? nomeTelefone == null : pessoa[i].getNome().equals(nomeTelefone)) || (pessoa[i].getTelefone() == null ? nomeTelefone == null : pessoa[i].getTelefone().equals(nomeTelefone))) {
System.out.println("Nome " + pessoa[i].getNome() + " Telefone " + pessoa[i].getTelefone());
existe = true;
}
}
if (existe == false) {
System.out.println("Contato inexistente");
}
msgVoltar();
}
// altera um contato
public void alterar() {
int cont = 0;
boolean encontrou = false;
System.out.println("Digite o nome que está procurando");
String nome = entrada.nextLine();
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == null ? nome == null : pessoa[i].getNome().equals(nome)) {
encontrou = true;
cont = i;
break;
}
}
if (encontrou == true) {
System.out.println("A busca encontrou " + pessoa[cont].getNome());
System.out.println("Digite o novo nome.");
String novoNome = entrada.nextLine();
pessoa[cont].setNome(novoNome);
System.out.println("O número antigo é : " + pessoa[cont].getTelefone());
System.out.println("Digite o número novo.");
String novoNumero = entrada.nextLine();
pessoa[cont].setTelefone(novoNumero);
System.out.println("Alteração realizada com sucesso! Nome: " + pessoa[cont].getNome() + " Telefone: " + pessoa[cont].getTelefone());
} else {
System.out.println("A busca não encontrou nenhum contato com esse nome.");
}
msgVoltar();
}// fim do método alterar
// cadastra um contato
public void cadastrar() {
System.out.println("Inserir novo contato Digite o nome");
String nome = entrada.nextLine();
System.out.println("Digite o telefone");
String telefone = entrada.nextLine();
pessoa[id].setNome(nome);
pessoa[id].setTelefone(telefone);
System.out.println("Contato cadastrado com sucesso!");
id++;
msgVoltar();
}// fim do método cadastrar
public void menu() {
int opc;
do {
System.out.println(" ================================================ ");
System.out.println("| Agenda Telefônica |");
System.out.println(" ================================================ ");
System.out.println("| 1 - Inserir novo contato |");
System.out.println("| 2 - Pesquisar um contato pelo nome ou telefone |");
System.out.println("| 3 - Editar um contato |");
System.out.println("| 4 - Apagar um contato |");
System.out.println("| 0 - Sair do programa |");
System.out.println(" ================================================ ");
opc = Integer.parseInt(entrada.nextLine());
switch (opc) {
case 1:
cadastrar();
break;
case 2:
procurar();
break;
case 3:
alterar();
break;
case 4:
apagar();
break;
case 0:
break;
}
} while (opc != 0);
}
}
agora esta funcionando exatamente como o meu professor pediu. ele nao exigiu que verificasse se ja existe um nome ou telefone iguais antes de cadastrar outro contato. Só gostaria que alguem explicasse o que perguntei no ultimo post?[/b]
GOSTEI 0
Job Silva
11/01/2012
Objetos devem ser comparados com o método [color=green]equals[/color], não com o operador [color=blue]==[/color] !
O operador [color=blue]==[/color], quando aplicado a objetos (não números), apenas indica
se se trata da mesma isntância (mesmo endereço de memória). Ou seja,
duas instâncias distintas serão consideradas diferentes mesmo tendo o
mesmo conteúdo.
O método [color=green]equals [/color]deve, se sobrescrito corretamente como na String,
comparar o conteúdo das instâncias.
String a1 = "a";
String a2 = new String("a"); // outra instância, mesmo conteúdo
if (a1 == a2) {// vai ser false, outra instância
System.out.println("NÃO será mostrado");
}
if (a1.equals(a2)) { // vai ser true = mesmo conteúdo
System.out.println("vai ser impresso");
}
GOSTEI 0
Hidelgard
11/01/2012
public boolean existeContato(String name) {
boolean existe = false;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome().equals(name)) { // tentei fazer isso mas nao funcionou com o método equals .
existe = true;
break;
}
System.out.println("O contato nao existe");
}
return existe;
}
a unica forma que fez funcionar foi assim:
public boolean existeContato(String name) {
boolean existe = false;
for (int i = 0; i < pessoa.length; i++) {
if (pessoa[i].getNome() == null ? name == null : pessoa[i].getNome().equals(name)) {
existe = true;
break;
}
System.out.println("O contato nao existe");
}
return existe;
}
so queria que alguem me explicasse o que faz essa parte do codigo?
if (pessoa[i].getNome() == null ? name == null : pessoa[i].getNome().equals(name)) {
existe = true;
break;
}
GOSTEI 0
Job Silva
11/01/2012
[i]você[/i] acabou fazendo com o [color=green]equals[/color]!
Onde você escreveu que não funciona (meio vago) provavelmente é
porque o [color=green]getNome()[/color] retornou [color=blue]null [/color]e, como já vimos, não tem como
chamar um método (não [color=blue]static[/color]) de um [color=blue]null[/color]!
Portanto, nesse caso se testa se o valor retornado é [color=blue]null [/color]antes de
chamar o [color=green]equals()[/color] dele.
A expressão
retorna 'valor1' se o valor de 'teste' for [color=blue]true[/color], 'valor2' caso
contrário.
GOSTEI 0
Hidelgard Cardoso
11/01/2012
realmente eu estava tentando usar o método equals com o objeto null.
o vetor pessoa[] do tipo Contato foi povoado com todos os indices null no construtor da classe Contato. Valeu o brigado pela ajuda sou iniciante no java e novato aqui no fórum.
GOSTEI 0
Reinaldo Filho
11/01/2012
Elaborar um programa em Java, baseado em objetos Swing para:
- Carregar os dados de um arquivo pré-existente para dentro de um Vetor;
- Classificar este vetor por ordem alfabética dos nomes carregados;
- Carregar este vetor classificado para um ListBox para permitir a seleção;
- A partir da seleção feita, demonstrar os outros dados referentes a esta seleção;
- Implementar um botão para finalização do programa;
- Implementar um botão para contabilizar as estatísticas dos dados em memória;
- Implementar um botão para inclusão de novos dados aos que estão em memória;
. Limpar os dados da tela e Permitir entrar com as informações;
. Ativar dois botões, um para salvar e outro para ignorar;
Dados do Arquivo:
- Código, Numérico Inteiro;
- Nome, Alfanumérico;
- Sexo, Alfanumérico (F/M);
- Cor dos Olhos, Alfanumérico;
- Cor dos Cabelos, Alfanumérico;
- Telefone, Alfanumérico;
- Opção, Alfanumérico (S/N);
- Grau de Instrução, Numérico Inteiro;
- Renda, Numérico Decimal;
professor n deu arquivo para pre carregar eu n sei nem por onde começar
e fazer tudo isso jframe
GOSTEI 0
Reinaldo Filho
11/01/2012
gostei dos codigos postados.
GOSTEI 0
Reinaldo Filho
11/01/2012
dexterrtf, otimas infos.
GOSTEI 0
Celio Spitzer
11/01/2012
[quote="Murilo Lilo"]SEEK estive ausente esses dias e estarei novamente apartir de amanhã, juro que perdi um pouco do rumo que tinha tomando desde o sábado... Vamos deixar de conversa mole e vamos ao que interessa...
Como você me intimou, primeiro tenho que ler bastante pra evitar fazer algo estruturado numa ambiente orientado a objeto, entendi bem, só tem umas coisas que era complexas pra burro e não teve jeito(mas também achei que aquilo era coisa bem avançada)... Pelo que eu vi, o jeito é fazer pelo console(bem diferente comparado ao Shell do Python(tela preta)), só que eu tô com uma ideia desgraçada na cabeça que eu posso avançar já pra GUI(devo estar ficando louco pra poder desenvolver alguma coisa legal(clicável eu acho kkkkkk) me da um norte cara...
Eu sou um cara que tem muita força de vontade só que sem muitas ideias(tenho que mudar isso urgente), a unica ideia que tenho é passar meu projeto do Python pra Java, e logo com GUI... Enfim eu acho que posso e não tenho dúvidas, não sei de tudo, mais gosto de estudar e fazer na hora, to afim de tentar meter a cara no negocio difícil sem medo de errar(até por que ainda estou estudando) me ajuda cara?
Tô pensando em desenhar o programa(como ficaria a interface), ver os nomes dos JAlgumaCoisa(componentes que irei usar) para estudar mais sobre eles... e acho que a parada das classes já ta bem fixada na minha cabeça...
ME AJUDA?!
PS: Num sei se você é professor ou se já é um cara fodão da área sei que você pode me ajudar demais =D enfim... Qualquer coisa serve! Vlw aguadando...
[img]http://javafree.uol.com.br/files_user/files/7/51/6E/challenge.jpg[/img]
GOSTEI 0
Mirian Fontoura
11/01/2012
“ Olá! Somos distribuidores e fornecemos a muitos revendedores e anunciantes. Agora você pode comprar diretamente conosco! www .AQUISHOP .com. Atendemos todo o Brasil, aceitamos Mercado Pago e somos ótimos fornecedores de todos os produtos de informática, celulares e eletrônicos. ”
GOSTEI 0
Celio Spitzer
11/01/2012
boa tarde amigos , sekkuar peço que me de mais detalhes de como o programa referente a lista Telefonica vai funcionar , passei pelo curso Java progressivo e quero por em prática os conhecimentos que lá obtive nesse programa da lista Telefonica. abraços
GOSTEI 0
Dragao Junior
11/01/2012
alguem pode ajudar?
http://javafree.uol.com.br/topic-894608-ajuda-com-Vetor-Lista-encadeada-e-BubbleSort.html#274414
GOSTEI 0
Flavio Santos
11/01/2012
[quote="Murilo Lilo"]Começando agora, só me dê mais informações, se existir, ou ela também só ouvir "Agenda telefônica"?
GOSTEI 0
Gabriel Barreto
11/01/2012
Ola sou iniciante e estou tendo problemas com um Algorítimo(Ou gambiarra) que estou desenvolvendo.
Meu objetivo é criar um jogo de forca, mas como estou apenas testando a lógica para depois criar algo melhor(mais genérico no caso), criei uma lista Cenoura, que é a própria palavra na forca. e ai o eclipse não reconhece o int certo como parâmetro para as duas listas.
[code]
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Aplicação {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
List<String> cenoura=new ArrayList<>();
//O jogador tem 3 chances
int chances=0;
int certo=0;
cenoura.add(0,"c");
cenoura.add(1,"e");
cenoura.add(2,"n");
cenoura.add(3,"o");
cenoura.add(4,"u");
cenoura.add(5,"r");
cenoura.add(6,"a");
List<String> imprimir=new ArrayList<>();
System.out.println("Tente uma letra,Voce tem 3 chances");
do{
imprimir.add(certo,input.next());
if(imprimir.get(certo)!=cenoura.get(certo)){
System.out.println(" Errado, tente de novo");
chances++;
}else{
certo++;
}
System.out.print(imprimir.get(certo));
}while(chances<4);
Iterator<String> iterator= cenoura.iterator();
while(iterator.hasNext()){
System.out.print(" "+iterator.next()+" ");
}
}
}
GOSTEI 0
Lucas Alves
11/01/2012
[quote="Gabriel gon"]Ola sou iniciante e estou tendo problemas com um Algorítimo(Ou gambiarra) que estou desenvolvendo.
Meu objetivo é criar um jogo de forca, mas como estou apenas testando a lógica para depois criar algo melhor(mais genérico no caso), criei uma lista Cenoura, que é a própria palavra na forca. e ai o eclipse não reconhece o int certo como parâmetro para as duas listas.
[code]
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Aplicação {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
List<String> cenoura=new ArrayList<>();
//O jogador tem 3 chances
int chances=0;
int certo=0;
cenoura.add(0,"c");
cenoura.add(1,"e");
cenoura.add(2,"n");
cenoura.add(3,"o");
cenoura.add(4,"u");
cenoura.add(5,"r");
cenoura.add(6,"a");
List<String> imprimir=new ArrayList<>();
System.out.println("Tente uma letra,Voce tem 3 chances");
do{
imprimir.add(certo,input.next());
if(imprimir.get(certo)!=cenoura.get(certo)){
System.out.println(" Errado, tente de novo");
chances++;
}else{
certo++;
}
System.out.print(imprimir.get(certo));
}while(chances<4);
Iterator<String> iterator= cenoura.iterator();
while(iterator.hasNext()){
System.out.print(" "+iterator.next()+" ");
}
}
} me ajudem por favor!!!
GOSTEI 0
Marcos Oliveira
11/01/2012
<code>
package main;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import javax.swing.JOptionPane;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Main {
public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("APS");
int nDiv, corrente;
double ΔΘrad, Θrad = 0.00, Θgrau = 0.00, ΔΘgrau, π, x1, y1, iEspira = 0.00, x2, y2, dlx, dly, dl, rx, ry, xFio, yFio, raioModulo = 0.00, raio, h = 0.00, iTotal = 0.00;
nDiv = Integer.parseInt(JOptionPane.showInputDialog(null,
"Digite o Número de Divisões", "Número de Divisões",1));
raio = Double.parseDouble(JOptionPane.showInputDialog(null,
"Digite o Valor do Raio da Espira (m)", "Raio", 1));
xFio = Double.parseDouble(JOptionPane.showInputDialog(null,
"Digite o Valor da Coordenada X da Posição do Fio", "Cooredenada X", 2));
corrente = Integer.parseInt(JOptionPane.showInputDialog(null,
"Digite o Valor da Corrente I (A)", "Corrente", 1));
yFio = 0;
π = Math.PI;
ΔΘrad = (2 * π / nDiv);
ΔΘgrau = ΔΘrad * 180 / π;
DecimalFormat df = new DecimalFormat("0.00000");
String rad = df.format(ΔΘrad);
JOptionPane.showMessageDialog(null,
"Sua variação ΔΘ no arco será de: \n" + ΔΘgrau + "º ou " + rad
+ "rad\n\n DADOS DE ENTRADA\n I: " + corrente
+ " A\nRaio: " + raio + " m\nXfio: " + xFio,"Dados", 2);
x1 = raio * Math.cos(Θrad);
y1 = raio * Math.sin(Θrad);
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("0", new Object[] { "I = ∮H.dl", "Θ" });
for (int i = 0; i < nDiv; i++) {
Θrad = ΔΘrad + Θrad;
Θgrau = Θgrau + ΔΘgrau;
x2 = raio * Math.cos(Θrad);
y2 = raio * Math.sin(Θrad);
dlx = x2 - x1;
dly = y2 - y1;
rx = x1 - xFio;
ry = y1 - yFio;
raioModulo = Math.sqrt(Math.pow(rx, 2) + Math.pow(ry, 2));
dl = ((-1) * ry * dlx) + (rx * dly);
h = corrente / (2 * π * Math.pow(raioModulo, 2));
iEspira = h * dl;
iTotal = iTotal + iEspira;
x1 = x2;
y1 = y2;
data.put("" + (i + 1), new Object[] { "" + iEspira, "" + Θgrau });
}
JOptionPane.showMessageDialog(null, "I = ∮H.dl = " + iTotal, "I = ∮H.dl", 2);
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if (obj instanceof String)
cell.setCellValue((String) obj);
if (obj instanceof Integer)
cell.setCellValue((Integer) obj);
}
}
try {
String nome = JOptionPane
.showInputDialog("Digite o nome do arquivo");
FileOutputStream out = new FileOutputStream(new File(
"Comprovação da lei de Ampère para caminho circular_"
+ nome + "_.xlsx"));
workbook.write(out);
out.close();
JOptionPane.showMessageDialog(null, "Documento criado com sucesso");
} catch (Exception e) {
e.printStackTrace();
}
}
}
</code>
GOSTEI 0
Marcos Oliveira
11/01/2012
<code>
package main;
import java.io.File;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import javax.swing.JOptionPane;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Main {
public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("APS");
int nDiv, corrente;
double ΔΘrad, Θrad = 0.00, Θgrau = 0.00, ΔΘgrau, π, x1, y1, iEspira = 0.00, x2, y2, dlx, dly, dl, rx, ry, xFio, yFio, raioModulo = 0.00, raio, h = 0.00, iTotal = 0.00;
nDiv = Integer.parseInt(JOptionPane.showInputDialog(null,
"Digite o Número de Divisões", "Número de Divisões",1));
raio = Double.parseDouble(JOptionPane.showInputDialog(null,
"Digite o Valor do Raio da Espira (m)", "Raio", 1));
xFio = Double.parseDouble(JOptionPane.showInputDialog(null,
"Digite o Valor da Coordenada X da Posição do Fio", "Cooredenada X", 2));
corrente = Integer.parseInt(JOptionPane.showInputDialog(null,
"Digite o Valor da Corrente I (A)", "Corrente", 1));
yFio = 0;
π = Math.PI;
ΔΘrad = (2 * π / nDiv);
ΔΘgrau = ΔΘrad * 180 / π;
DecimalFormat df = new DecimalFormat("0.00000");
String rad = df.format(ΔΘrad);
JOptionPane.showMessageDialog(null,
"Sua variação ΔΘ no arco será de: \n" + ΔΘgrau + "º ou " + rad
+ "rad\n\n DADOS DE ENTRADA\n I: " + corrente
+ " A\nRaio: " + raio + " m\nXfio: " + xFio,"Dados", 2);
x1 = raio * Math.cos(Θrad);
y1 = raio * Math.sin(Θrad);
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("0", new Object[] { "I = ∮H.dl", "Θ" });
for (int i = 0; i < nDiv; i++) {
Θrad = ΔΘrad + Θrad;
Θgrau = Θgrau + ΔΘgrau;
x2 = raio * Math.cos(Θrad);
y2 = raio * Math.sin(Θrad);
dlx = x2 - x1;
dly = y2 - y1;
rx = x1 - xFio;
ry = y1 - yFio;
raioModulo = Math.sqrt(Math.pow(rx, 2) + Math.pow(ry, 2));
dl = ((-1) * ry * dlx) + (rx * dly);
h = corrente / (2 * π * Math.pow(raioModulo, 2));
iEspira = h * dl;
iTotal = iTotal + iEspira;
x1 = x2;
y1 = y2;
data.put("" + (i + 1), new Object[] { "" + iEspira, "" + Θgrau });
}
JOptionPane.showMessageDialog(null, "I = ∮H.dl = " + iTotal, "I = ∮H.dl", 2);
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if (obj instanceof String)
cell.setCellValue((String) obj);
if (obj instanceof Integer)
cell.setCellValue((Integer) obj);
}
}
try {
String nome = JOptionPane
.showInputDialog("Digite o nome do arquivo");
FileOutputStream out = new FileOutputStream(new File(
"Comprovação da lei de Ampère para caminho circular_"
+ nome + "_.xlsx"));
workbook.write(out);
out.close();
JOptionPane.showMessageDialog(null, "Documento criado com sucesso");
} catch (Exception e) {
e.printStackTrace();
}
}
}
[/code]
GOSTEI 0
Tagila Coelho
11/01/2012
Faça um algoritmo em Java que, dados dois números, mostre os mesmos em ordem decrescente. alguem sabe?
GOSTEI 0
Ricardo Staroski
11/01/2012
Tente fazer, se não conseguir, poste o código que fez que aí fica fácil ajudar.
GOSTEI 0
Danilo Freire
11/01/2012
Murilo. Tenta rever sua lógica da seguinte forma.
Tenta por ArrayList<tel> na variavel global
Pessoa.java
ArrayList<String> telefones = new telefone<String>();
//...
telefonesAdd(String telefone) {
telefones.add(telefone);
}
Agenda.java
//...
Scanner entrada = new Scanner(System.in);
Pessoa fulano;
for(int i=0;i<numeroTelefones;++i){
System.out.println("Informe o "+(i+1)+"º telefone");
String telefone = entrada.next();
fulano.addTelefones(telefone);
}
Você pode setar os telefones na classe Pessoa também só que alem do parâmetro telefone eu resolveria entrando com o parametro numero de telefones (nTels) pra colocar um for.
Espero que eu tenha clareado alguma possibilidade. Flw
GOSTEI 0
Danilo Freire
11/01/2012
[quote="Danilo Freire"]Murilo. Tenta rever sua lógica da seguinte forma.
Tenta por ArrayList<tel> na variavel global
Pessoa.java
ArrayList<String> telefones = new telefone<String>();
//...
telefonesAdd(String telefone) {
telefones.add(telefone);
}
Agenda.java
//...
Scanner entrada = new Scanner(System.in);
Pessoa fulano;
for(int i=0;i<numeroTelefones;++i){
System.out.println("Informe o "+(i+1)+"º telefone");
String telefone = entrada.next();
fulano.addTelefones(telefone);
}
Você pode setar os telefones na classe Pessoa também só que alem do parâmetro telefone eu resolveria entrando com o parametro numero de telefones (nTels) pra colocar um for.
Espero que eu tenha clareado alguma possibilidade. Flw
Desculpa os erros de escrita no código.
Por algum motivo alguns caracteres somem quando eu posto... :arrow:
GOSTEI 0
Danilo Freire
11/01/2012
Elabore uma classe ContaBancaria, com os seguintes membros:
- atributo String cliente
- atributo int numConta
- atributo double saldo
métodos
- metodo sacar(o saldo não pode ficar negativo)
- metodo depositar
Agora acrescente ao projeto duas classes herdadas de ContaBancaria: ContaPoupanca e ContaEspecial, com as seguintes caracteristicas a mais:
---> Classe ContaPoupanca:
- atributo int diaRendimento
- metodo calcularNovoSaldo, recebe a taxa de rendimento da poupança e atualiza o saldo.
---> Classe ContaEspecial:
- atributo double limite
- redefinição do metodo sacar, permitindo saldo negativo até o valor do limite.
Após a implementação das classes acima, você deverá implementar uma classe Contas.java, contendo o metodo MAIN. Nesta classe, você deverá implementar:
a) Incluir dados relativo as contas de um cliente;
b) sacar um determinado valor das suas contas;
c) depositar um determinado valor nas suas contas;
d) Mostrar o novo saldo do cliente, a partir da taxa de rendimento, daqueles que possuem conta poupança;
e) mostrar o dados das contas dos clientes.
ALGUEM PODE ME AJUDAR?
GOSTEI 0
Acemary
11/01/2012
I am going develop school management .I have the requirements and this is my first project. I want to develop this project to test my knowledge. But I am not able to start
from which part to start..?
and what should be the proper way to develop any application
please help me ... [url=http://www.traininginsholinganallur.in/php-training-in-chennai.html]PHP Training in Chennai[/url] :D | [url=http://www.besanttechnologies.com/training-courses/php-training/php-training-institute-in-chennai]PHP Training in Chennai[/url] :D | [url=http://www.trainingintambaram.in/php-training-in-chennai.html]PHP Training in Chennai[/url] :D
GOSTEI 0
Sabrinasusan
11/01/2012
VMware is a virtualization and cloud computing software provider for x86-compatible computers.|
do you want to learn a high level language ?then you get job opportunity for all over world.
https://www.gangboard.com/app-programming-scripting-training/php-training
https://www.gangboard.com/cloud-computing-training/vmware-training
https://www.gangboard.com/business-intelligence-training/msbi-training
https://www.gangboard.com/app-programming-scripting-training/chef-training
https://www.gangboard.com/cloud-computing-training/openstack-training
GOSTEI 0