gabicavalcante / arvores

Código do trabalho sobre Árvores de LP II
0 stars 0 forks source link

Classe Pessoa #1

Open gabicavalcante opened 9 years ago

gabicavalcante commented 9 years ago

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.

7robertodantas commented 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.

7robertodantas commented 9 years ago

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. ;)