C# 无法打印c中同一类的属性#
编写一个C#程序,将一个人的出生日期作为输入,计算他/她的年龄并显示年龄。该程序还应检查此人是成年人还是儿童。 显示示例输出中给出的结果。 创建一个名为Person的类。 创建字段、属性和方法,如下所示 从一个名为Program的类中为person创建对象,该类包含Main方法并显示DisplayDetails方法中的详细信息 注: 不要创建新的名称空间 使用公共访问说明符创建类 严格遵守命名约定 样本输入:1 输入名字 爱丽丝 输入姓氏 摩西 以yyyy/mm/dd/格式输入出生日期 1998/12/23 样本输出:1 名字:爱丽丝 姓:摩西 年龄:19 成人的 样本输入:2 输入名字 乔 输入姓氏 诺埃尔 以yyyy/mm/dd/格式输入出生日期 2002/10/15 样本输出:2 名字:爱丽丝 姓:摩西 年龄:17 孩子 当我试图运行下面的代码时,它没有打印阶段,即成人或儿童,我不明白我在这里做错了什么C# 无法打印c中同一类的属性#,c#,properties,C#,Properties,编写一个C#程序,将一个人的出生日期作为输入,计算他/她的年龄并显示年龄。该程序还应检查此人是成年人还是儿童。 显示示例输出中给出的结果。 创建一个名为Person的类。 创建字段、属性和方法,如下所示 从一个名为Program的类中为person创建对象,该类包含Main方法并显示DisplayDetails方法中的详细信息 注: 不要创建新的名称空间 使用公共访问说明符创建类 严格遵守命名约定 样本输入:1 输入名字 爱丽丝 输入姓氏 摩西 以yyyy/mm/dd/格式输入出生日期 1998
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();
}
}
}
您从未设置“阶段”字段。此处可能存在一些其他问题,因为仅按年份比较的日期不准确,导致将年龄四舍五入到年份。除此之外,只需做一点小小的改动,就可以正确打印出所需内容 您可以将成人值设置为“”或String.Empty,这将导致执行setter逻辑。然后,这将为stages变量提供一个可以打印到控制台的值
obj.Dob = Convert.ToDateTime(Console.ReadLine());
obj.Adult = String.Empty;
obj.DisplayDetails();
样本数据的结果:
这一款现在运行良好,通过了100%的测试用例
public String Adult
{
get
{
if (GetAge(dob) >= 18)
{
return "Adult";
}
else
{
return "Child";
}
}
set
{}
}
对于主类,我使用了一个空字符串为成人属性赋值
obj.Dob = Convert.ToDateTime(Console.ReadLine());
obj.Adult = "";
obj.DisplayDetails();
您从未设置
阶段。我唯一看到它被设置的地方是成人的setter,它从未被调用过。也许你是想将该代码放入设定器中,用于Dob
?我只是想将年龄与成人财产中的18岁进行比较,但我不明白如何在成人设定方法中使用年龄是的,但有两种可能性,即“成人”或“儿童”这就是为什么我对如何在AdultI的set方法中设置这些值感到困惑的原因。我真的不知道C#是如何工作的,但也许可以使用与“成人.set”中相同的代码创建一个CheckStage方法,然后在“Dob.set”的末尾调用它。是的,这个方法工作得很好,但在实现这个逻辑时,它是这样说的。失败1:未按照要求实施成人财产。做一些改变。看起来您可能需要在Setter中处理它以满足您的要求。如果您可以尝试一下最新版本,看看它是否满足您的要求。是的,它现在工作正常,并且通过了所有案例,我们需要更改成人财产中的代码,我已经做了,您可以检查以下代码。非常感谢你的帮助。