首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复活节日期计算器Android应用程序

复活节日期计算器Android应用程序
EN

Code Review用户
提问于 2021-02-19 19:57:10
回答 1查看 55关注 0票数 2

由于复活节假期临近,我决定通过编写一个Android应用程序来开发我的Android技能,该应用程序计算西方和复活节日历的日期。

这些公式是从互联网上得到的。这是一个简单的应用程序,您输入年份,在TextView中获取两个日历的日期,我使用EditText作为标签,使它们不可点击,当日期可见时出现,当日期不显示时隐藏起来。

我没有任何专业或实习经验。任何输入都会有帮助。它是在Android 4.1.2上构建和编译的,并在我的设备上运行。

以下是XML的代码。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/textView"
        android:layout_width="459dp"
        android:layout_height="56dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="@string/welcome"
        android:textSize="22sp"
        app:layout_constraintBottom_toTopOf="@+id/editTextDate"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        android:gravity="center"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextDate"
        android:layout_width="wrap_content"
        android:layout_height="46dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:gravity="center"
        android:maxLength="4"
        android:digits="0123456789"
        android:inputType="date"
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <TextView
        android:id="@+id/textViewWestern"
        android:layout_width="150dp"
        android:layout_height="48dp"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text=""
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.045"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextDate" />

    <TextView
        android:id="@+id/textViewEastern"
        android:layout_width="150dp"
        android:layout_height="48dp"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text=""
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.969"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextDate" />

    <EditText
        android:id="@+id/western"
        android:layout_width="150dp"
        android:layout_height="44dp"
        android:layout_marginStart="12dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center"
        android:inputType="textPersonName"
        android:background="@android:color/transparent"
        android:text="Western"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextDate" />

    <EditText
        android:id="@+id/eastern"
        android:layout_width="150dp"
        android:layout_height="44dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:inputType="textPersonName"
        android:text="Eastern"
        android:background="@android:color/transparent"
        android:gravity="center"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.969"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextDate" />
</androidx.constraintlayout.widget.ConstraintLayout> 

MainActivity.java代码。

代码语言:javascript
复制
package com.example.easterdate;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText Edit = findViewById(R.id.editTextDate);
        final TextView text = findViewById(R.id.textViewWestern);
        final TextView textEastern = findViewById(R.id.textViewEastern);
        final EditText eastern = findViewById(R.id.eastern);
        final EditText western = findViewById(R.id.western);

        eastern.setVisibility(View.INVISIBLE);
        western.setVisibility(View.INVISIBLE);

        Edit.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                if (s.toString().trim().length() == 0 || Integer.parseInt(s.toString()) < 1800) {
                    text.setText("");
                    textEastern.setText("");
                    eastern.setVisibility(View.INVISIBLE);
                    western.setVisibility(View.INVISIBLE);
                    return;
                }

                EditText Edit = findViewById(R.id.editTextDate);
                int AN = Integer.parseInt(Edit.getText().toString());

                int G = AN % 19;
                int C = AN / 100;
                int H = (C - C / 4 - (8 * C + 13) / 25 + 19 * G + 15) % 30;
                int I = H - (H / 28) * (1 - (H / 28) * (29 / (H + 1)) * ((21 - G) / 11));
                int J = (AN + AN / 4 + I + 2 - C + C / 4) % 7;

                int L = I - J;
                int MP = 3 + (L + 40) / 44;
                int JP = L + 28 - 31 * (MP / 4);

                int mon, day;

                int A = AN % 19;
                int b = AN % 7;
                int ce = AN % 4;
                int d = (19 * A + 16) % 30;
                int e = (2 * ce + 4 * b + 6 * d) % 7;
                int f = (19 * A + 16) % 30;
                int key = f + e + 3;
                if (key > 30)
                    mon = 5;
                else
                    mon = 4;
                if (key > 30)
                    day = key - 30;
                else day = key;

                String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

                eastern.setVisibility(View.VISIBLE);
                western.setVisibility(View.VISIBLE);
                text.setText("Sunday " + JP + " " + month[MP - 1]);
                textEastern.setText("Sunday " + day + " " + month[mon - 1]);

            }

            @Override
            public void afterTextChanged(Editable s) {


            }
        });

    }
}

这代码有多专业?我应该使用函数而不是命令式编程吗?TextWatcher用于防止应用程序崩溃,并在输入中显示日期,还有更好的解决方案吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2021-02-19 20:24:15

小评论

这代码有多专业?

缺乏文档

复活节的日期是不容易辨认和依靠一些神秘的计算。“这些公式是从互联网上得到的。”是没有足够的文件。在您必须修复或扩展这段代码之后,考虑一下程序员。最好在代码中包括更多的细节--至少有一个URL或者引用到源算法。下面是示例。我不确定OP的消息来源。

代码语言:javascript
复制
Anonymous Gregorian algorithm: Meeus/Jones/Butcher
Dates of Easter
Astronomical Algorithms 1991
Jean Meeus
https://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm

Meeus's Julian algorithm
https://en.wikipedia.org/wiki/Computus#Meeus's_Julian_algorithm

范围

代码应该记录其有效年份的范围。

在描述

中的精度

“.计算西方和复活节日历的日期。”

说到“西方”,我怀疑你是指公历

所谓“复活节”,我怀疑你指的是“东方”或朱利安历法

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/256241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档