Tehtävä:
Tehtäväpohjassa tulee mukana edellä nähdyt luokat Henkilo ja Paivays. Täydennä luokan Henkilo metodia public int ikaVuosina() siten, että se laskee ja palauttaa henkilön tämän hetkisen iän vuosina.
Voit olettaa, että jokaisessa vuodessa on tasan 360 päivää.
Vinkki! Näppärä lähestymistapa on laskea päivien summa vuosien, kuukausien ja päivien perusteella. Erottamalla "nykypäivää" vastaavan päivien summan syntymäpäivän päivien summasta saat elettyjen päivien määrän. Eletyt päivät saa muunnettua takaisin vuosiksi jakolaskulla.
public int ikaVuosina() { LocalDate nyt = LocalDate.now(); int vuosiNyt = nyt.getYear(); int kuukausiNyt = nyt.getMonthValue(); int paivaNyt = nyt.getDayOfMonth(); // muokkaa tätä metodia sopivasti int syntvuosi = this.syntymaPaiva.getVuosi(); int syntpv = this.syntymaPaiva.getPaiva(); int syntkk = this.syntymaPaiva.getKuukausi(); int ika = vuosiNyt - syntvuosi; if (kuukausiNyt < syntkk || paivaNyt < syntpv) { ika--; } return ika; }
testi ohjelma:
public class Main { public static void main(String[] args) { // Voit tehdä täällä tehtävään liittyviä kokeiluja Henkilo h = new Henkilo("Esim", 28, 9, 2015); System.out.println(h.ikaVuosina()); } }
ikä vuosina näyttää 1v vähemmän
osaisko joku kertoa missä mättää ?
for_123 kirjoitti:
if (kuukausiNyt < syntkk || paivaNyt < syntpv) {
ika--;
Tämä on pielessä. Laittaisin jotenkin näin:
if (kuukausiNyt < syntkk) { ika--; else if (kuukausiNyt == syntkk && paivaNyt < syntpv) { ika--;
Tai sit jos haluaa kikkailla niin
if ((kuukausiNyt<<5 + paivaNyt) < (syntkk<<5 + syntpv)) { ika--; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.