闰年Java Q

闰年Java Q,java,Java,我需要为闰年写一个方法。因此,该方法必须称为printleap,并检查数字是否为闰年。因此,java程序将通过读取年份列表来测试该方法,并且只显示闰年。 以下是我所做的: 导入java.util.Scanner; 公共类Ex1PartAassig3{ public static int printleap(String string) { Scanner sc1=new Scanner(System.in); { System.out.println("This

我需要为闰年写一个方法。因此,该方法必须称为printleap,并检查数字是否为闰年。因此,java程序将通过读取年份列表来测试该方法,并且只显示闰年。 以下是我所做的:

导入java.util.Scanner; 公共类Ex1PartAassig3{

public static int printleap(String string) {
    Scanner sc1=new Scanner(System.in);
    {
        System.out.println("This programe calculates leap year.");
        int year= printleap ("Enter the year:");
        if ((year%4==0)&& year % 100 !=0)
    }
    System.out.println(year + "is a leap year.");
    {
    else if ((year % 4==0) && (year % 100==0)&&(year % 400==0))
    {
        System.out.println(year +"is a leap year.");
    }
    else {
    }
        System.out.println(year + " is not a leap year.");

    }

}

}
显示错误的区域在第一个“else”下面加下划线 如果((第%4年==0)和&(第%100年==0)和&(第%400年==0)

和两个花括号,第一个正好在第二个系统的上方 底部的第一个括号。底部有3个括号,但它是第一个1


有人能帮我运行这个程序吗?或者我忘记了什么谢谢你?

你的花括号到处都是,没有对齐。这将是一个固定版本,有正确匹配的花括号:

public static void printleap()
{
    try (Scanner sc1=new Scanner(System.in))
    {
        System.out.println("This programe calculates leap year.");
        System.out.print("Enter the year:");
        int year= sc1.nextInt();
        if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
        {
            System.out.println(year +"is a leap year.");
        }
        else
        {
            System.out.println(year + " is not a leap year.");
        }
    }
}

编辑:还更新了if语句以使用下面答案的条件,因为初始代码中的条件确实有缺陷。闰年必须能被4整除,但如果100整除的年份也能被400整除,那么100整除的年份仅为闰年。

您的条件是错误的

一定是

 if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
您的逻辑(使用
if
else if
)应如下所示:

if ( year%400 == 0)
    System.out.println(year+ " is leap year");
  else if ( year%100 == 0)
    System.out.println(year+ " is NOT leap year");
  else if ( year%4 == 0 )
    System.out.println(year+ " is leap year");
  else
     System.out.println(year+ " is NOT leap year");
使用java.time 有一个

最好始终指定所需/预期的时区,而不是隐式地依赖JVM的当前默认时区

Year.now( ZoneId.of( "Europe/Paris" ) )
    .isLeap()
或者指定一年

Year.of( 2017 )
    .isLeap()

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、。

在您的第一个
if
语句之后,立即出现错误的结束括号。请花一些时间查看括号的开始和结束位置关闭。这看起来有点可疑吗?
if((year%4==0)和&year%100!=0)}
printleap()方法调用printleap()方法。这是不必要的。不要麻烦用户输入年份。从编写要求您编写的方法开始:printleap()方法,它以一年为参数(因此,一个int,而不是一个字符串),并打印该年份是否为闰年。如果必须处理用户输入,则应在单独的方法中完成。您可以首先通过硬编码年份调用printleap()方法来测试它。这到底是如何“修复”的?它甚至没有编译。你是对的,我只是修复了其中未对齐的大括号。要使它编译,他还必须修复方法签名。更新了答案以解决这个问题。好的,我撤回了我的否决票。这可以正确编译和运行。不,这是关于原始程序的一个没有错的地方。OP只是将此条件分解为三种不同的情况。但它们确定哪些年份是闰年的逻辑实际上是正确的。感谢您的评论:public static int printleap(字符串){Scanner sc1=new Scanner(System.in);{System.out.println(“此程序计算闰年”);int year=printleap(“输入年份:”);如果((年份%400==0)和((年份%4==0)和((年份%100!=0)){System.out.println(年份+“是闰年”);}如果((年份%4==0)和((年份%100==0)和((年份%400==0)){System.out.println(年份+“是闰年”);}否则{System.out.println(年份+“不是闰年”);}返回0;}}很抱歉,我试图展示我得到了什么,但它似乎没有正确显示出来
Year.of( 2017 )
    .isLeap()