为什么我的代码跳过第一天查找第二天?

时间:2016-10-14 18:27:40

标签: java netbeans

我应该制作第二天显示的代码,除了结束于31的月份之外,这个工作正常。例如,当我输入2000年3月31日时,它给了我4/2/2000并跳过第一天?我不确定为什么?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package lab53;

import java.util.Scanner;
/**
 *
 * @author Owner
 */
public class Lab53 {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {
        // TODO code application logic here
        Scanner keyboardInput = new Scanner(System.in); 
        int year, month, day;                        
        System.out.println("Enter year/month/day");
        year = keyboardInput.nextInt();                
        month = keyboardInput.nextInt();               
        day = keyboardInput.nextInt();                 

        if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12))    
        {              
            day=thirtyOneDaysMonth(day);      
            if(day==1 && month==12){          
                ++year;                       
                month=1;                      
            }
            else if(day==1 && month!=12)      
                ++month;                    
        }

        if ((month==2 || month == 4 || month == 6 || month == 9 || month == 11))     
        {
            day=thirtyDaysMonth(day);              
            if(month==2 && isLeapYear(year))       
            {

                if(day>29)                          
                {
                    ++month;                       
                    day=1;                         
                }
            }
            else if( day>28 && month==2)           
            {
                ++month;                            
                day=1;                             
            }
            else                           
            {

                if(day==1)                       
                {
                    ++month;                            
                    day=1;                             
                }
            }
        }
        System.out.println("The next date is:"+ month + "/" + day + "/" + year);  
    }  

    public static int thirtyOneDaysMonth(int day) 
    {
        if(day==31)                              
            day=1;
        else
            ++day;                              
        return day;
    }

    public static int thirtyDaysMonth(int day) 
    {
        if(day==30)                             
            day=1;
        else
            ++day;                              
        return day;
    }

    public static boolean isLeapYear(int year) 
    {
        if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
            return true;
        else
            return false;
    }
}

3 个答案:

答案 0 :(得分:2)

if ((month==2 || month == 4 || month == 6 || month == 9 || month == 11))更改为else if ((month==2 || month == 4 || month == 6 || month == 9 || month == 11))

在某一天= 31,您将在if语句中更新月份。然后你离开if,然后输入你的下一个if语句来处理30天的月份。然后,您的代码会再次增加一天。

答案 1 :(得分:0)

因为在第一个if增加3/31/20004/1/2000之后,第二个if被评估,这将再次增加一天。将第二个if改为else if

答案 2 :(得分:0)

在月份== 3和日期== 31的情况下,白天通过

回到1
day=thirtyOneDaysMonth(day);

然后这个月被

提升了
else if(day==1 && month!=12)      
                ++month;

然后下一个if语句为true,因为现在是月== 4

if ((month==2 || month == 4 || month == 6 || month == 9 || month == 11))

使用else将其连接到之前的if语句if将解决问题

else if ((month==2 || month == 4 || month == 6 || month == 9 || month == 11))