В настоящее время я пишу программу, которая просит пользователя ввести день, месяц, год. Затем программа проверяет, является ли дата действительной или нет. Тем не менее, в феврале я не могу заставить его вывести правильный ответ, когда вводится високосный год.

import javax.swing.*;

public class ValidDate{

public static void main(String[]args){

    int day,month,year;

    day = Integer.parseInt(JOptionPane.showInputDialog("Enter a day"));
    month = Integer.parseInt(JOptionPane.showInputDialog("Enter a month"));
    year = Integer.parseInt(JOptionPane.showInputDialog("Enter a year"));

    switch(month){  //this statement will check whether or not the days are valid
        case 1:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
            break;

        case 2:
            if ( day >= 1 && day <= 28 || month % 4 == 0 && day >= 1 && day <= 29 ){   //look at 
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 3:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 4:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 5:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 6:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 7:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 8:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 9:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 10:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 11:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 12:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }//case ended
        }
    }
}

Результат, который я получаю при вводе високосного года:

Date is not valid
Date is valid
Date is valid
Date is valid
Date is valid
Date is valid
Date is valid
0
David 27 Май 2017 в 19:56

2 ответа

Лучший ответ

Изменить:

month % 4 == 0

Чтобы :

year % 4 == 0

Если вы пытаетесь это для учебы, хорошо. В противном случае вы можете проверить високосный год, используя:

GregorianCalendar gc = new GregorianCalendar();
if (gc.isLeapYear(year)) 

Григорианский календарь

0
Blasanka 27 Май 2017 в 17:25

Без

перемена;

После того, как он найдет правильный случай, он провалится и выполнит следующие. Если вы не создаете массовые обращения, добавьте оператор break Что я имею в виду для массовых наблюдений:

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY;

  public boolean isWorkDay() {
    switch(this) {
      case SATURDAY:
      case SUNDAY:
        return false;
      default:
        return true;
    }
  }
}
0
SkyBoat 27 Май 2017 в 17:16