将2月份的问题显示为有效日期

时间:2013-10-22 00:24:07

标签: java

所以我一直在研究这个程序,并且我已经有了一些日期可以正常工作,但是当我输入2月份的未来年份时,它表明它不应该是无效的。 为了这个计划,二月份的日子只有1-28。 任何人都可以帮我搞错吗?

  import java.util.Scanner;
    public class FutureDate {
     public static void main (String args[]){

  int inputMonth;
  int inputDate;
  int inputYear;
  final int currentMonth = 10;
  final int currentDate = 24;
  final int currentYear = 2013;
  final int numberOfDays = 31; 

  Scanner keyboard = new Scanner(System.in);

  System.out.println("Enter a month in format - mm: ");
  inputMonth = keyboard.nextInt();

  System.out.println("Enter a day in format - dd: ");
  inputDate= keyboard.nextInt();

  System.out.println("Enter a year in format - yyyy: ");
  inputYear = keyboard.nextInt();


  if (inputYear < currentYear)
  System.out.println("Invalid Date");

  else if (inputYear >= currentYear)


  {

     if (inputMonth >= 1 && inputMonth <=12){        

        if ((inputMonth == 4 || inputMonth == 6 || inputMonth == 9 || inputMonth == 11) && (inputDate >= 1 && inputDate <= 30))
        System.out.println("Valid Date");

        else if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=30)
        System.out.println("Valid Date");

        else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=30)
        System.out.println("Valid Date");

        else

        System.out.println("Invalid Date");
        }

     else if (inputMonth == 2 && inputDate >= 1 && inputDate <= 28){
        System.out.println("Valid Date");

        if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=28)
        System.out.println("Valid Date");

        else if (inputMonth == currentMonth && inputDate > currentDate && inputDate<=28)
        System.out.println("Valid Date");

        else
        System.out.println("Invalid Date");
        } 

      else if (inputMonth == 1 || inputMonth == 3 || inputMonth == 5 || inputMonth == 7 || inputMonth ==10 || inputMonth == 12 && inputDate >= 1 && inputDate <= 31){

        if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=31)
        System.out.println("Valid Date");

        else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=31)
        System.out.println("Valid Date");

        else
        System.out.println("Invalid Date");

     }

      else           
      System.out.println ("Invalid Date");

        }

  }

  }

2 个答案:

答案 0 :(得分:1)

你的第一个if子句会检查它是在1月到12月之间(2月份是哪个),所以它会进入if子句而不是第二个。

如果在第一个

之前移动你的第二个

答案 1 :(得分:1)

  1. 始终使用花括号作为单行如果 -s和其他 -s。

  2. 让我们看看你的第一个 if

    // 1.
    if (inputMonth >= 1 && inputMonth <=12){        
    // 2.
    if ((inputMonth == 4 || inputMonth == 6 || inputMonth == 9 || inputMonth == 11) && (inputDate >= 1 && inputDate <= 30))
    System.out.println("Valid Date");
    // 3.
    else if (inputMonth > currentMonth && inputDate >= 1 && inputDate <=30)
    System.out.println("Valid Date");
    // 4.
    else if (inputMonth == currentMonth && inputDate > currentDate && inputDate <=30)
    System.out.println("Valid Date");
    // 5.
    else
    
    System.out.println("Invalid Date");
    }
    
    • // 1是真的,所以我们进入。
    • // 2是假的;继续
    • // 3是假的;继续
    • // 4是假的;继续
  3. 现在我们在// 5,打印出“无效日期”。

    要修正你的逻辑。