Avatar billede stjernen Nybegynder
31. august 2005 - 17:55 Der er 17 kommentarer og
1 løsning

En smule hjælp

Hej eksperter, jeg laver en lille opgave, som skal finde ud af om en given år er skudår eller ej. Reglen er sådan:

"A year is a leap year if it is divisible by 4, unless it is also divisible by 100 but not 400".

Det er ikke nogen lektier, men udelukkende selvstudium. Jeg har prøvet at lave opgaven, men jeg tror at der er et problem med mine logiske operatorer i if-sætningen.

Håber der nogen der kan se, hvad problemet er.

public static void main(String[] args) {
        int year;
       
        System.out.print("Enter a year (the year has to be greater than 1582): ");
        year = Keyboard.readInt();
       
        if (year < 1582)
            System.out.println("Sorry, I can remember the year before 1582");
        else {
            if((year % 4 == 0) && ((year % 100 == 0) && (year % 400 == 0)))
                System.out.println("This year is a leap year.");
            else System.out.println("This year is NOT a leap year.");
        }
Avatar billede arne_v Ekspert
31. august 2005 - 17:59 #1
skal den ene && ikke være en || ?
Avatar billede arne_v Ekspert
31. august 2005 - 18:00 #2
if((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))
Avatar billede stjernen Nybegynder
31. august 2005 - 18:02 #3
Det passer ikke helt, for når du så prøver med 2004, siger den at det ikke er et skudår.
Jeg havde faktisk til start lavet den på den her måde:

        if((year % 4 == 0) || ((year % 100 == 0) && (year % 400 == 0)))
... men det er heller ikke helt rigtigt
Avatar billede stjernen Nybegynder
31. august 2005 - 18:03 #4
den skl jo være delelig med 4 ELLER delegig med 100 og ikke med 400:)
Avatar billede stjernen Nybegynder
31. august 2005 - 18:06 #5
tror jeg selv fandt den nu
  if((year % 4 == 0) && ((year % 100 == 0) && (year % 400 != 0)))

Jeg prøver den lige af..
Avatar billede stjernen Nybegynder
31. august 2005 - 18:09 #6
Jeg mente sådan her:
  if((year % 4 == 0) || ((year % 100 == 0) && (year % 400 != 0)))

... men det virkede heller ikke:(
Avatar billede arne_v Ekspert
31. august 2005 - 20:00 #7
har du prøvet 18:00:09 ?
Avatar billede jakoba Nybegynder
31. august 2005 - 20:49 #8
if ( year % 4 == 0 ) {
        // måske et skudår
    if

if(  (  (year % 4 == 0)
        && (year % 100 != 0)
        )
    || (year % 400 == 0)
  ) {
        // skudår
} else {
        // ikke skudår
}

mvh JakobA
Avatar billede jakoba Nybegynder
31. august 2005 - 20:52 #9
Upd. de 3 øverste linier er skrald fra et udkast. ignorer dem.
Avatar billede stjernen Nybegynder
31. august 2005 - 20:55 #10
jo arne v, hr prøvet den, men det virkede heller ikke:(
Avatar billede stjernen Nybegynder
31. august 2005 - 20:59 #11
dit ser hvist ud til at virke jakoba, men jeg har også fundet en anden måde:

int year;
       
        System.out.print("Enter a year (the year has to be greater than 1582): ");
        year = Keyboard.readInt();
       
        if (year < 1582) 
            System.out.println("Sorry, I can't remember the year before 1582"); 
        else {   
            if(year % 4 == 0) 
            {   
              if ((year % 100 == 0) && (year % 400 != 0)) System.out.println("This year is NOT a leap year."); 
              else System.out.println("This year is a leap year.");   
            } 
            else System.out.println("This year is NOT a leap year.");
        }
Avatar billede stjernen Nybegynder
31. august 2005 - 21:00 #12
Men tak for hjælpen begge to, er det muligt at dele pointene mellem to brugere?
Avatar billede arne_v Ekspert
31. august 2005 - 21:01 #13
package august;

public class LeapYear {
    public static boolean isLeapYear(int year) {
        return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
    }
    public static void main(String[] args) {
        System.out.println(isLeapYear(2005));
        System.out.println(isLeapYear(2004));
        System.out.println(isLeapYear(2000));
        System.out.println(isLeapYear(1900));
    }

}

virker tilsyneladende hos mig
Avatar billede arne_v Ekspert
31. august 2005 - 21:01 #14
ja du kan godt dele - bare begge ligger svar og du markerer begge navne i kombo
boksen inden du klikker accepter
Avatar billede stjernen Nybegynder
31. august 2005 - 21:03 #15
oki, kan i så ikke lige gøre det?
Avatar billede arne_v Ekspert
31. august 2005 - 21:07 #16
fra mig
Avatar billede stjernen Nybegynder
31. august 2005 - 21:14 #17
hmm, har ventet på jacoba, men han svarer ikke så du får alle pointene, takker begge to..
Avatar billede arne_v Ekspert
31. august 2005 - 21:29 #18
det var ikke lang tid du ventede

jeg overfører lige halvdelen http://www.eksperten.dk/spm/644557
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester