Hei, olen tehnyt MOOC peruskurssin viikko 1 kaikki tehtävät paitsi -> Tehtävä 21: Karkausvuosi
- jaksaako joku selittää miten tuossa pääsisi eteenpäin?
.."Vuosi on karkausvuosi, jos se on jaollinen 4:llä. Kuitenkin jos vuosi on jaollinen 100:lla, se on karkausvuosi vain silloin, kun se on jaollinen myös 400:lla.
Tee ohjelma, joka tarkistaa, onko vuosi karkausvuosi."
Eli ensin käsittääkseni jaetaan, mutta liittyykö jakojäännös tähän eli tarkistetaanko vielä pariton/ parillinen... Noh en sotke tämän enempää, mutta tämä on vika tehtävä viikko 1:sestä.
bool onko_karkausvuosi_1(int vuosi) { if (vuosi % 4 == 0) { if (vuosi % 100 == 0) { if (vuosi % 400 == 0) { return true; } else { return false; } } else { return true; } } else { return false; } }
late kirjoitti:
liittyykö jakojäännös tähän eli tarkistetaanko vielä pariton/ parillinen...
Ehkä sinun kannattaisi lukea opas jakojäännöksestä, niin saattaisit ymmärtää, että jakojäännös ja luvun parillisuuden tarkistaminen eivät ole sama asia.
Vähän tiiviimpi ja helppolukuisempi versio
bool karkausvuosi(uint vuosi) { if (vuosi % 4 != 0) { return false; } if (vuosi % 100 == 0) { return vuosi % 400 == 0; } return true; }
Minusta helpoimpia ovat seuraavat vaihtoehdot:
if (vuosi % 400 == 0) return true; if (vuosi % 100 == 0) return false; if (vuosi % 4 == 0) return true; return false;
if (vuosi % 4 != 0) return false; if (vuosi % 100 != 0) return true; if (vuosi % 400 != 0) return false; return true;
return vuosi % 4 == 0 && (vuosi % 100 != 0 || vuosi % 400 == 0);
Joo eihän tämä tosiaan ollutkaan kovin ihmeellinen kun tajuaa että kyse vain jakojäännöksestä. Tietty esimerkeistä hienostunein on Metabolixin, koska se on identtinen mallivastauksen kanssa.
import java.util.Scanner; public class Karkausvuosi { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); System.out.print("Anna vuosi: "); int vuosi = Integer.parseInt(lukija.nextLine()); if (vuosi % 4 == 0 && ( vuosi % 100 != 0 || vuosi % 400 == 0 ) ) { System.out.println("Vuosi on karkausvuosi."); } else { System.out.println("Vuosi ei ole karkausvuosi."); } } }
Alla oma versio, jossa otin mallia Teuron ehdotuksesta, kiitän kaikkia esimerkkejä!
import java.util.Scanner; public class Karkausvuosi { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); // Anna vuosi System.out.print("Anna vuosi: "); int vuosi = Integer.parseInt(lukija.nextLine()); // Vuosi on karkausvuosi, jos se on jaollinen 4:llä. // Jos vuosi on jaollinen 100:lla, se on karkausvuosi vain silloin, // kun se on jaollinen myös 400:lla. if (vuosi % 4 == 0) { if (vuosi % 100 == 0) { if (vuosi % 400 == 0) { System.out.println("Vuosi on karkausvuosi."); } else { System.out.println("Vuosi ei ole karkausvuosi."); } } else { System.out.println("Vuosi on karkausvuosi."); } } else { System.out.println("Vuosi ei ole karkausvuosi."); } } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.