gpt4 book ai didi

java - 计算复活节星期天的日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:01 24 4
gpt4 key购买 nike

编写一个程序来计算复活节星期天的日期。复活节星期日是 Spring 第一个满月后的第一个星期日。使用数学家 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 的余数。忽略商。

然后复活节落在 n 月的 p 日。

例如,如果 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 作为输出。

关于java - 计算复活节星期天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com