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.