Как рассчитать возраст человека - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь разработать приложение Android через Android Atudio, чтобы рассчитать возраст человека. Приложение работает без синтаксических ошибок, но есть логическая ошибка в расчетах с датами, например, 12/7/1996, - количество лет и месяцев неверно.

Когда я ввожу дату 1997 / 6/12 результат составляет 23 года 11 месяцев и 6 дней, а ожидаемый результат - 24 года 0 месяцев и 6 дней.

package com.example.helloworldapp;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    public void BtnClicked(View BtnView) {
        EditText year = findViewById(R.id.year);
        EditText month = findViewById(R.id.moth);
        EditText day = findViewById(R.id.day);
        TextView result = findViewById(R.id.TV);
        int differanceOfYears = Calendar.getInstance().get(Calendar.YEAR) - Integer.parseInt(year.getText().toString());
        int differanceOfMonthes = Calendar.getInstance().get(Calendar.MONTH) - Integer.parseInt(month.getText().toString());
        int differanceOfDays = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) - Integer.parseInt(day.getText().toString());
        if (differanceOfDays < 0) {
            differanceOfMonthes = differanceOfMonthes - 1;
            differanceOfDays = 30 + differanceOfDays;
        };
        if (differanceOfMonthes < 0) {
            differanceOfYears = differanceOfYears - 1;
            differanceOfMonthes = 12 + differanceOfMonthes;
        };
        int numberOfDays = differanceOfDays + differanceOfMonthes * 30 + differanceOfYears * 365;
        result.setText("you have lived for " + differanceOfYears + "" + "years, " + differanceOfMonthes + "" + "months and " + differanceOfDays + "" + "days ," + "totally" + numberOfDays + "" + "days");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Если вы отметите это System.out.println(Calendar.getInstance().get(Calendar.MONTH)), он напечатает 5, даже если текущий месяц июнь. Вероятно, это связано с тем, что в календаре это месяц с индексом 5 (начиная с 0)

Из документов: https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH

public static final int MONTH

Field number for get and set indicating the month. This is a calendar-specific 
value. The first month of the year in the Gregorian and Julian calendars is 
JANUARY which is 0; the last depends on the number of months in a year.

Просто добавьте 1 к ваш differanceOfMonthes.

Прикольная программа кстати!

0 голосов
/ 18 июня 2020

Попробуйте использовать Date Picker, чтобы прочитать дату от пользователя в правильном формате. В editText пользователь может писать дату в другом формате. И эта статья geeksforgeeks может помочь вам понять лог c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...