【问题标题】:Leap Year Java Program [duplicate]闰年Java程序[重复]
【发布时间】:2020-09-09 00:24:06
【问题描述】:

我正在努力学习 Java。当我输入不是闰年的 1800 年时,它会显示“闰年”,但如果我输入不是闰年的 2011 年,它会显示“不是闰年”。

有人可以帮忙吗?我是 Java 新手,所以我正在学习这一切。我试图解决的问题如下所示。

如果年份可以被 4 整除,则该年份是闰年。但是,如果年份是 能被 100 整除,那么只有当它也是闰年时,它才是闰年 能被 400 整除。

import java.util.Scanner;
    
public class leapyears {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter a year!");
        int year = Integer.valueOf(scanner.nextLine());


        if (year % 4 == 0) {

            System.out.println("Leap year!");

            if (year % 100 != 0 && year % 400 == 0) {

                System.out.println("Leap year!");

            }
        } else {
            System.out.println("Not leap year!");
        }
    }
}

【问题讨论】:

  • 你的逻辑没有意义。您打印“闰年!”在你检查这个数字是否能被 100 整除之前。
  • 是的——这并不是真正的编程问题,而是理解逻辑的问题。并非所有能被 4 整除的年份都是闰年,因此您需要先测试特殊情况,然后再测试一般情况。
  • 您的代码实现了以下算法:如果年份不能被 4 整除,则打印“不是闰年”(那部分很好),否则(如果年份可以被 4 整除)打印“闰年”,如果它不能被 100 整除但能被 400 整除(这永远不会发生),则再次打印“闰年”
  • 你应该在提问之前进行研究,也许你的答案就在这里stackoverflow.com/questions/1021324/…

标签: java


【解决方案1】:

不要重新发明轮子,Java 已经为您做到了!

java.time.Year::isLeap

import java.time.Year;

public class Main
{
    public static void main(String[] args) {
        System.out.println(Year.of(2020).isLeap());
    }
}

【讨论】:

    【解决方案2】:

    你可以写一个简单的方法,也方便测试。

    for (int year : new int[] { 1843, 1900, 2000, 2004, 2200,
                2400 }) {
        System.out.printf("%d is%sa leap year.%n", year,
                        isLeapYear(year) ? " " : " not ");
        }
    }
    
    // non century years divisible by 4 or century years divisible by 400
    public static boolean isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
    }
    

    您也可以使用库方法来检查自己的方法。

    import java.time.Year;
    for (int year = 2000; year <= 3000; year++) {
        if (Year.isLeap(year) != isLeapYear(year)) {
            System.out.println("Oops - " + year);
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为你的条件不正确。 year % 100 !=0 year % 400 ==0 不能同时满足。请尝试以下操作。

         if (year % 400 == 0 || ((year % 4 ==0) && (year %100 != 0)) {
                         //  ^ this is OR      //^ this is AND
      
              System.out.println("Leap year!");
         else{
              System.out.println("Not leap year!");
          }
      

      【讨论】:

        【解决方案4】:

        对于初学者来说,这不是代码的问题,这是您不了解闰年程序背后的逻辑的问题。(当我开始做java时,不久前我也遇到了同样的问题):D`

        你在你的问题中遇到的重要缺陷是这个 在检查 100 之前检查了 4 的模数,因为可被 4 整除的数字并不总是能被 100 整除,但反之亦然。

        假设你输入的年份是 1800,它将被 4 整除,这意味着 if 语句为真,并且块被执行。(这是错误的)

        你应该考虑做的是

        1. 先检查 100 的可整性,然后再检查数字是否可被 4 或 400 整除

        我已经固定了一个代码供你理解

        import java.util.Scanner;
        

        公开课闰年{

        public static void main(String[] args) {
        
            Scanner s = new Scanner(System.in);
            
            System.out.print("Enter the year:");
            int yr = s.nextInt();
            
            if(yr%100==0)
            {
                if(yr%400==0)
                {
                    System.out.println(yr+" "+"is a leap year");
                }
                else
                {
                    System.out.println(yr+" "+"is not a leap year");
                }
                
            }
        
            else if(yr%4==0)
            {
                System.out.println(yr+" "+"is an leap year");
            }
            
            else
            {
                System.out.println(yr+" "+"is not a leap year");
            }
        }
        

        }

        希望这能解决您的问题....(:

        附言 这是我的第一个答案,我对编程很陌生。因此,如果我犯了任何错误,请随时让我知道,如果您想对我现有的代码进行任何更新,我们非常欢迎您..感谢您抽出宝贵时间阅读我的这个答案

        【讨论】:

        • 格式化你的代码,答案需要重点,请清理你的答案。
        • ...并避免使用“u”、“coz”和“lemme”。写“你”、“因为”和“让我”并不难,而且很多更容易阅读。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多