2017-02-19 2 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))) 
    } 

}  

Вышеуказанное является основным и не может быть изменено. Проблемы с классом.Расчет летнего года с использованием метода

+4

«Проблемы с классом.» Какая проблема, с каким классом? –

+2

У вас есть мои симпатии. Теперь, каков ваш вопрос? –

+0

Почему у вас есть два 'int' поля в вашем классе? Также выглядит, что ваш конструктор не инициализирует ни один из них. – 4castle

ответ

1

Не много изменений в вашей первоначальной попытке, кроме добавления чека, чтобы узнать, введен ли пользователь действительный год в этом случае между 1000 и 2999 включительно с использованием regex (я оставлю его как задачу для вас изменить это код для того, что вы считаете, как действительного года):

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; 
     } 
    } 
    } 
} 

Пример использование: Тестирование високосного

Please enter a year: 2016 
You entered the valid year: 2016 
That's a leap year! 
Использование

Пример: Неверный ввод и тестирование Беспоставочной високосный год

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! 

Попробуйте here!

+1

1752 был * не * первый високосный год. Григорианский календарь использовался уже в 1582 году в некоторых частях света. Но кроме того, в юлианском календаре тоже были високосные годы, восходя к 45 г. до н.э. Кроме того, при вычислении мы часто используем * пролептическую григорианскую систему календаря, которая предполагает, что мы всегда были григорианцами. Однако вы смотрите на это, мы имели их очень долгое время. (1752 год, когда Великобритания и американские колонии приняли Григорианский календарь). Это все в Википедии, BTW. –

Смежные вопросы