计算复活节星期天的日期

编写一个程序来计算复活节星期天的日期。复活节星期日是春天的第一个满月之后的第一个星期日。使用数学家卡尔·弗里德里希·高斯(Carl Friedrich

Gauss)在1800年发明的算法:

  1. y是年份(如1800年或2001年)
  2. 除以y通过19并调用剩余a。忽略商。
  3. 除以y通过100获得商b和余数c
  4. 除以b通过4获得商d和余数e
  5. 除以8 * b + 13通过25获得商g。忽略其余部分。
  6. 除以19 * a + b - d - g + 15通过30得到的余数h。忽略商。
  7. 除以c通过4获得商j和余数k
  8. 除以a + 11 * h通过319获得商m。忽略其余部分。
  9. 除以2 * e + 2 * j - k - h + m + 32通过7得到的余数r。忽略商。
  10. 除以h - m + r + 90通过25获得商n。忽略其余部分。
  11. 除以h - m + r + n + 19通过32获得的剩余部分p。忽略商。

然后复活节p是一个月的一天n

例如,如果y为2001:

a = 6

b = 20

c = 1

d = 5

e = 0

g = 6

h = 18

j = 0

k = 1

m = 0

r = 6

n = 4

p = 15

因此,在2001年,复活节星期日是4月15日。

确保提示用户输入年份并让用户输入年份。另外,请确保输出p和n的值以及描述输出值的适当消息。


将其放入Java代码时遇到了一些麻烦。这是我尝试过的:

import java.util.Scanner;

public class Easter {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int y = 2014;

int a = y % 19;

int b = y / 100;

int c = y % 100;

int d = b / 4;

int e = b % 4;

int g = (8 * b + 13) / 25;

int h = (19 * a + b - d - g + 15) % 30;

int j = c / 4;

int k = c % 4;

int m = (a + 11 * h) / 319;

int r = (2 * e + 2 * j - k - h + m + 32) % 7;

int n = (h - m + r + 90) / 25;

int p = (h - m + r + n + 19) % 32;

getEasterSundayMonth = n;

System.out.println("Month: " + Easter.getEasterSundayMonth());

}

}

这就是我所拥有的。我不知道如何分配内容,就像我试图使getEasterSundayMonth的值相等一样n,很确定它是不正确的。我从这里去哪里?

回答:

试试这个:

import java.util.Scanner;

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 = "January ";

break;

case 2:

result = "February ";

break;

case 3:

result = "March ";

break;

case 4:

result = "April ";

break;

case 5:

result = "May ";

break;

case 6:

result = "June ";

break;

case 7:

result = "July ";

break;

case 8:

result = "August ";

break;

case 9:

result = "September ";

break;

case 10:

result = "October ";

break;

case 11:

result = "November ";

break;

case 12:

result = "December ";

break;

default:

result = "error";

}

return result + p;

}

}

2001结果的输入April 15作为输出。

以上是 计算复活节星期天的日期 的全部内容, 来源链接: utcz.com/qa/410162.html

回到顶部