计算复活节星期日的日期

Dev*_*ski 8 java math

写一个程序来计算复活节星期日的日期.复活节星期日是春天第一个满月后的第一个星期天.使用数学家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
Run Code Online (Sandbox Code Playgroud)

因此,在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());
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的.我不知道如何分配东西,就像我试图得到getEasterSundayMonth相等的价值n,非常确定它不对.我从哪里开始?

gpa*_*ani 8

试试这个:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

2001结果输入April 15作为输出.

  • 此评论正确回答了使用高斯1800计算的问题/作业.作为对可能偶然发现这个答案的人的警告,寻找计算复活节的算法,请注意高斯的方法仅保证在18和19世纪.您可能更喜欢使用另一种方法(例如,Anonymous Gregorian)来确保20世纪及以后的准确性.见http://en.wikipedia.org/wiki/Computus (9认同)