【发布时间】:2010-12-09 21:12:06
【问题描述】:
import java.util.Scanner;
public class GregorianYear
{
private int year;
public GregorianYear(int a)
{
year = a;
}
public void SetYear()
{
System.out.println( "The year is: " );
Scanner kbd = new Scanner( System.in );
year = kbd.nextInt();
}
public int getYear()
{
return year;
}
public boolean isLeapYear()
{
if ( year > 1852 )
{
if ( year % 100 == 0)
{
if ( year % 400 == 0)
{
return false;
}
else
{
return true;
}
}
}
//Compiler says I need a return statement here.
}
}
我正在编写一个(应该是)简单的类程序,当我没有任何东西时,它说我需要一个返回语句。我假设我只能返回一个布尔语句,所以我输入 return isLeapYear();。当我这样做时,我的测试方法(另一个具有公共静态 void main 的文件)运行并在我输入 return 语句的行导致 StackOverflow 错误。我做错了什么?
【问题讨论】:
-
选择更易读的缩进样式 (en.wikipedia.org/wiki/Indent_style)。另外,请发布测试代码;您发布的代码没有任何会导致堆栈溢出的内容。为什么要歧视 1852 年之前的年份?
-
注意:方法名以小写字符开头。
-
由于一些并发编辑,缩进搞砸了,我现在稍微修复了它。是的,这种缩进很可怕,但我可以看到它在学校里教,所以我并不是真的在抱怨,我只是希望乔伊能在某个时候看到正确缩进的光芒。
-
我认为 1852 应该读作 1582,这是许多天主教国家采用公历的年份。美国独立后采用公历。它是追溯采用的,这意味着几个世纪在美国有两个日期,我们现在称之为的那一天和那天被调用的那一天。因此,如果您阅读独立前的文件,您可能会阅读自编写以来已更改的日期。 ;)