无法在 c#

问题描述

编写一个 C# 程序,输入一个人的出生日期,计算他/她的年龄并显示年龄。该程序还应检查此人是成人还是儿童。 显示示例输出中给出的结果。 创建一个名为 Person 的类。 创建如下所示的字段、属性方法enter image description here

从包含 Main 方法的名为 Program 的类为 person 创建对象,并从 displayDetails 方法显示详细信息。

注意:

不要创建新的命名空间。

使用公共访问说明符创建类。

严格遵循命名约定。

样本输入:1

输入名字

爱丽丝

输入姓氏

摩西

以 yyyy/mm/dd/ 格式输入出生日期

1998/12/23

样本输出:1

名字:爱丽丝

姓氏:摩西

年龄:19

成人

样本输入:2

输入名字

输入姓氏

诺尔

以 yyyy/mm/dd/ 格式输入出生日期

2002/10/15

样本输出:2

名字:爱丽丝

姓氏:摩西

年龄:17

孩子

当我尝试运行以下代码时,它没有打印阶段,即成人或儿童,我不明白我在这里做错了什么。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_SHARP
{
    public class Person
    {
        private String firstName;
        private String lastName;
        private DateTime dob;
        private String stages;
        public String FirstName
        {
            get
            {
                return firstName;
            }
            set
            {
                firstName = value;
            }
        }
        public String LastName
        {
            get
            {
                return lastName;
            }
            set
            {
                lastName = value;
            }
        }
        public DateTime dob
        {
            get
            {
                return dob;
            }
            set
            {
                dob = value;
            }

        }
        public String Adult
        {
            get
            {
                return stages;
            }
            set
            {
                if (GetAge(dob) > 18)
                {
                    stages = "Adult";
                }
                else
                {
                    stages = "Child";
                }
            }
        }
        public void displayDetails()
        {
            Console.WriteLine("First Name: " + this.firstName);
            Console.WriteLine("Last Name: " + this.lastName);
            Console.WriteLine("Age: "+this.GetAge(dob));
            Console.WriteLine(this.stages);
        }
        public int GetAge(DateTime dob)
        {
            int age = 0;
            age = DateTime.Now.Year - dob.Year;
            return age;
        }
    }

    public class Progarm
    {
        public static void Main(String[] args)
        {
            Person obj = new Person();
            Console.WriteLine("Enter first name");
            obj.FirstName = Console.ReadLine();
            Console.WriteLine("Enter last name");
            obj.LastName = Console.ReadLine();
            Console.WriteLine("Enter date of birth in yyyy/mm/dd/ format");
            obj.dob = Convert.ToDateTime(Console.ReadLine());
            obj.displayDetails();

        }
    }
}

解决方法

您从未设置“阶段”字段。

,

此处可能存在其他一些问题,因为仅按年份比较的日期不准确,导致将年龄四舍五入到年份。除此之外,您可以通过进行一些小的更改来获得正确打印的内容。

您可以将 Adult 值设置为 "" 或 String.Empty,这将导致执行您的 setter 逻辑。然后,这将为 stage 变量提供一个您可以打印到控制台的值。

            obj.Dob = Convert.ToDateTime(Console.ReadLine());
            obj.Adult = String.Empty;
            obj.DisplayDetails();

您的示例数据的结果: Alice Moses Age 23 Adult

,

这个现在工作正常,它通过了 100% 的测试用例。

public String Adult
    {
        get
        {
            if (GetAge(dob) >= 18)
            {
                return "Adult";
            }
            else
            {
                return "Child";
            }
        }
        set
        {}  
    }

对于主类,我使用空字符串为 Adult 属性赋值。

obj.Dob = Convert.ToDateTime(Console.ReadLine());
        obj.Adult = "";
        obj.DisplayDetails();

Ouput Window