2017-02-19 3 views
-6
import java.util.Scanner; 

public class LeapYearTester{ 

    public static void main(String[] args){ 

     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter a year"); 
     int year_input = input.nextInt(); 

     // now make a Year object 

     Year theYear = new Year(year_input); 

     // now check to see if it's a leap year 

     if (theYear.isLeapYear()) 
     System.out.println("That's a leap year!"); 
     else 
     System.out.println("That's not a leap year!"); 
    } 
} 


    public class Year 
    { 
    // declare your instance variables here 
    private int theYear; 
    private int Year; 

    // write your constructor here 
    public Year(int y) 
    { 
    y=Year; 
    } 
    static boolean isLeapYear(final int Year) { 
    return Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0); 
    //(((Year%4==0) || (Year%400)) && ((!Year%100==0) || (Year%400=0))) 
    } 

}  

Das obige ist der Main und kann nicht geändert werden. Probleme mit der Klasse haben.Schaltjahr Berechnungen mit Methode

+4

„Probleme mit der Klasse zu haben.“ Welche Schwierigkeiten, mit welcher Klasse? –

+2

Sie haben meine Sympathien. Nun, was ist deine Frage? –

+0

Warum haben Sie zwei "int" -Felder in Ihrer Klasse? Es sieht auch so aus, als würde Ihr Konstruktor keines von beiden initialisieren. – 4castle

Antwort

1

nicht viel Änderung Ihrer ursprünglichen Versuch andere als Zugabe einen Scheck, um zu sehen, ob der Benutzer ein gültig Jahr eingegeben in diesem Fall zwischen 1000 und 2999 inklusive regex (ich werde es als eine Aufgabe für Sie hinterlassen, dies zu ändern Code für das, was Sie als gültig Jahr betrachten):

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class LeapYearTester { 
    public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    System.out.print("Please enter a year: "); 
    String yearInput = ""; 
    String pattern = "^[12][0-9]{3}$"; 
    Pattern r = Pattern.compile(pattern); 
    //checking is valid year 
    while(input.hasNext()){ 
     yearInput = input.nextLine(); 
     Matcher m = r.matcher(yearInput); 
     if(m.find()) { 
     System.out.println("You entered the valid year: " + m.group(0)); 
     break; 
     } else { 
     System.out.println("Error: Not a valid year"); 
     System.out.print("Please enter a year between 1000 and 2999 inclusive: "); 
     } 
    } 

    Year theYear = new Year(Integer.valueOf(yearInput)); 

    if(theYear.isLeapYear()) { 
     System.out.println("That's a leap year!"); 
    } else { 
     System.out.println("That's not a leap year!"); 
    } 
    } 

    public static class Year { 
    private int year; 

    private Year(int y) { 
     year = y; 
    } 

    private boolean isLeapYear() { 
     if (year % 4 != 0) { 
     return false; 
     } else if (year % 400 == 0) { 
     return true; 
     } else if (year % 100 == 0) { 
     return false; 
     } else { 
     return true; 
     } 
    } 
    } 
} 

Beispiel Nutzung: Testen eines Schaltjahr

Please enter a year: 2016 
You entered the valid year: 2016 
That's a leap year! 

Beispiel Nutzung: Ungültige Eingabe und Testen eines nicht Schaltjahr

Please enter a year: 3000 
Error: Not a valid year 
Please enter a year between 1000 and 2999 inclusive: 2015 
You entered the valid year: 2015 
That's not a leap year! 

Probieren Sie es here!

+1

1752 war * nicht * das erste Schaltjahr. Der Gregorianische Kalender wurde bereits im Jahr 1582 in einigen Teilen der Welt verwendet. Aber auch der Julianische Kalender hatte Schaltjahre, die bis ins Jahr 45 v. Chr. Zurückreichen. Außerdem verwenden wir in der Computertechnik oft das * proleptische Gregorianische * Kalendersystem, das davon ausgeht, dass wir immer Gregorianisch waren. Wie auch immer Sie es betrachten, wir haben sie schon sehr lange Zeit. (1752 ist, als Großbritannien und die amerikanischen Kolonien den Gregorianischen Kalender annahmen). Dies ist alles auf Wikipedia, BTW. –