Open gabicavalcante opened 9 years ago
Eu adicionei import java.time.LocalDate; e ele parou de dar erro nisso. Mas agora está dando cannot find variable aniversario.
[...] LocalDate.of(aniversario.YEAR, aniversario.MONTH, aniversario.DAY_OF_MONTH);
de onde surgiu esse aniversário e de onde surgiram esses atributos constantes .YEAR, .MONTH, .DAY_OF_MONTH? isso é tipo um struct, ou sei lá, uma classe com constantes?
procurei no código, mas só aparece aniversário nessa parte.
Estava tentando entender como funcionava a classe Pessoa. Criei classe Tree que criava 2 pessoas para adicionar no nó e tive muitos problemas no que diz respeito ao tratamento do Calendar nascimento.
Após muitas lutas e pesquisas percebi algumas coisas diferentes na hora de instanciar (na verdade não é esse termo pq não dá p instanciar Calendar por ser abstrata) mas na hora de atribuir o Calendar no construtor de Pessoa.
Então fiz algumas modificações no construtor de pessoa:
1 - Alterei para ele dar clear() no nascimento. Não sei se realmente é necessário dar clear(), mas por via das dúvidas, melhor resetar logo já que é construtor.
2 - Após o clear(), Ele captura os dados do Calendar passado como parâmetro através da função get e já passa essas informações através de um único .set(); Exemplo:
public etc etc (Calendar c) { nascimento.set(c.get(Calendar.YEAR),c.get(Calendar.MONTH) ... ); }
3 - Alterei a função showInfo, pois antes o objeto Calendar estava concatenando com a String , e sei lá, acho q isso dá NullException ou algum erro, pelo que testei aqui. Alterei para pegar o valor e atribuir a data e DateFormat para formatar essa data de nascimento e por fim imprimí-la.
Date data = nascimento.getTime(); DateFormat formataData = DateFormat.getDateInstance(); System.out.print("Data de Nascimento : " + formataData.format(data));
4 - Alterei a função getIdade.. estava bem doida na verdade, acho q vc copiou alguns trechos de exemplos na internet e estava mt doido. tinha até variavel que não havia sido alocada.. enfim, refiz e coloquei uns if para verificar se já passou do mês e dia do aniversário no ano.. se sim ele retorna atual - nascimento. se não, atual - nascimento -1 pq não completou o ano.
Acho que é isso.. Desculpe-me se fiz alguma besteira no seu código... kkkkkkkk
Se quiser testar é só criar um Tree().
A classe time seria mais simples, porém, no java doc api mostra os construtores e métodos como deprecated.
As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date).
Um dos motivos q encontrei na internet é q no construtor e tal do ano ele já considera 1900 e vc tem que somar a quantidade de anos p 1900.
Eu encontrei uma biblioteca externa que substitui esse java.time
Joda-Time provides a quality replacement for the Java date and time classes. Joda-Time is the de facto standard date and time library for Java. From Java SE 8 onwards, users are asked to migrate to java.time (JSR-310).
http://www.joda.org/joda-time/
Se você quiser dar uma olhada , Parece ser mais fácil que essa bagunça do Calendar / Date. ;)
Adicionar uma forma de ver a ideda da pessoa.
Eu tentei usar a classe time, mas acho que o pacote dela não está no BlueJ. Na classe time, tem métodos que fariam o calculo mais facilmente.