public class Karkausvuosi { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); System.out.println("Anna vuosi: "); int vuosi = Integer.parseInt(lukija.nextLine()); if (vuosi % 4 == 0) { System.out.println("Vuosi on karkausvuosi."); }else if (vuosi % 100 == 0 && vuosi % 400 == 0){ System.out.println("Vuosi on karkausvuosi."); }else { System.out.println("Vuosi ei ole karkausvuosi."); } } }
Koodin pitäisi tulostaa arvolla 1800 tuon tekstin että "vuosi ei ole karkausvuosi." mutta sen sijaan tulostaa "vuosi on karkausvuosi."
Missäköhän olen mennyt vikaan?
Onko vuosi 1800 jaollinen neljällä?
Mitä silloin tekee ensimmäinen if-lause?
Oliskohan opettajat tehny källin.Mun mielestä tuo on oikein:(
ääh ei aukene...
Pitäisköhän toi muotoilla jotenkin toisin että sais ton toimimaan?
Lisäys: oisko ideoita?Suora vastaus tarvitaanXD
Lisäys: siis tarkoitin oikea vastaus.Jostain syystä kirjoittaminenkin on välillä vähän hankalaa:)
Kokeiles muokata noita tulostuksia seuraavasti.
if (vuosi % 4 == 0) { System.out.println("Vuosi on karkausvuosi. Ensimmainen karkaus"); }else if (vuosi % 100 == 0 && vuosi % 400 == 0){ System.out.println("Vuosi on karkausvuosi. Toinen karkaus"); }else { System.out.println("Vuosi ei ole karkausvuosi."); }
Mitä huomaat tulosteessa? Mikä tulostus pitäisi olla? Missä voisi olla vika? TuomasK antoi jo hyvän vinkin ongelma kohdasta.
Palailen asiaan...
Sulla on logiikassa virhe.
Wikipedia kirjoitti:
Juliaanisessa kalenterissa karkausvuosi oli poikkeuksetta joka neljäs vuosi[1], vuosiluvun ollessa jaollinen neljällä. Gregoriaanisessa kalenterissa tästä on se poikkeus, että täydet vuosisadat (eli sadalla jaolliset vuodet) eivät ole karkausvuosia muulloin kuin joka 400. vuosi (eli vuosi on jaollinen 400:lla). Esimerkiksi vuodet 1700, 1800 ja 1900 eivät olleet karkausvuosia, mutta 1600 ja 2000 olivat.
Nyt olet määrittänyt, että karkausvuosia ovat kaikki neljällä jaolliset vuodet. Toiseen if-lauseeseen päädytään vain, jos vuosi ei ole neljällä jaollinen, ja silloin se ei ole jaollinen myöskään sadalla tai 400:llä.
Tutki ensimmäisessä if-lauseessa, onko vuosi jaollinen 400:llä, ja toisessa if-lauseessa, onko vuosi jaollinen neljällä mutta ei sadalla.
Nämä if-lauseet voi tiivistää tai-operaattorilla myös yhteen if-lauseeseen.
No nyt toimii,tänks.En aivan vielä ymmärrä logiikkaa mutta kaippa se vielä aukenee. Pikkasen hämää kun en ite tajunnu tätä mutta ei sen puoleen ei mulla ollu hajuakaan esimerkiks mikä toi karkausvuosikaan on:)
Aihe on jo aika vanha, joten et voi enää vastata siihen.