我运行程序,它工作正常,我不知道我做了什么,但这是我在对话框中得到的。应该说4月5日不是错误5
Please enter a year to calculate Easter Sunday
>2015
error5
有人可以找出错误来自哪里吗?还有一个问题是我需要所有案例1-12和所有月份吗?或者我可以从四月开始,因为它是我用来计算复活节星期日的唯一一个月。
import java.util.Scanner;
public class Easter
{
public static void main(String[] args)
{
System.out.print("Please enter a year to calculate Easter Sunday\n>");
Scanner s = new Scanner(System.in);
int inputted = getResult(s);
while(inputted <= 0)
{
System.out.print("Expected a positive year. Please try again:\n>");
inputted = getResult(s);
}
System.out.println(getEasterSundayDate(inputted));
}
private static int getResult(Scanner s)
{
while(!s.hasNextInt())
{
System.out.print("Expected a valid year. Please try again:\n>");
s.nextLine();
}
return s.nextInt();
}
public static String getEasterSundayDate(int year)
{
int a = year % 19,
b = year / 100,
c = year % 100,
d = b / 4,
e = b % 4,
g = (8 * b + 13) / 25,
h = (19 * a + b - d - g + 15) % 30,
j = c / 4,
k = c % 4,
m = (a + 11 * h) / 319,
r = (2 * e + 2 * j - k - h + m + 32) % 7,
n = (h - m + r + 90) / 25,
p = (h - m + r + n + 19) % 32;
String result;
switch(n)
{
case 1:
result = "April ";
break;
default:
result = "error";
}
return result + p;
}
}
答案 0 :(得分:3)
这是一个简单的错字。
您的switch语句如下所示:
switch(n)
{
case 1:
result = "April ";
break;
default:
result = "error";
}
请注意,该月份的数字为n
,因此如果n
为4,则表示找到的月份为4月。但是,在此代码中,您将4月案例视为n
1 ,而不是4.因此,因为您的程序是计算 {{1如果是{4},它不会被n
覆盖,从而导致case 1:
而不是error
出现在输出中。将该switch语句更改为:
April
现在,请注意我正在使用switch(n)
{
case 4:
result = "April ";
break;
default:
result = "error";
}
代替case 4:
来正确查找April案例。
但是,如果你只是使用这样的一个案例,最好只使用case 1:
语句而不是if
:
switch
另一方面,当你像以前一样检查很多案件时,你应该使用if(n == 4)
result = "April ";
else
result = "error";
。
但是,我仍然认为你还应该考虑其他几个月的案例,因为它没有在other question的原始作业问题中说明复活节星期日总是在四月。