我正在编写一本教科书,要求我编写一个程序,将我的年龄读到控制台,然后将x年增加到我的年龄。我已经看到了关于这个主题和一些建议的一些评论。但是,我试图让我的版本比建议的更简洁。这是用户BCol在这里提出的一个很好的建议:
Defining AddYears, Calculating age in ten years using C#
我尝试用更少的步骤做同样的事情。这就是我的代码:
Console.WriteLine("Please, enter your age");
string age = Console.ReadLine();
DateTime myNewAge = new DateTime(int.Parse(age));
DateTime yearInFuture = myNewAge.AddYears(10);
Console.WriteLine(yearInFuture);
它还没有工作;在输入我的年龄并按回车键后,我将于01年1月11日凌晨12点00分到达。我真的很感激任何建议,以及如何使它正确地完成工作。我错过了什么?还有另一种方法吗?我是自学C#。提前致谢。
答案 0 :(得分:2)
下面的代码将包含两个参数,并在控制台窗口中显示结果。目标是接受一个年龄并通过第二个参数增加它。
Console.WriteLine("Please, enter your age");
string age = Console.ReadLine();
Console.WriteLine("Please, enter number of years to add.");
string addedYears = Console.ReadLine();
Console.WriteLine(int.Parse(age) + int.Parse(addedYears));
答案 1 :(得分:1)
在
int.Parse(age)
返回一个相对较小的数字,如20或30,代表人的年龄。
但是你要求DateTime
构造函数从中创建一个日期,并以错误的方式使用构造函数。您选择了一个带有int
https://msdn.microsoft.com/en-us/library/z2xf7zzk(v=vs.110).aspx
但根据文档,该数字代表自0001年1月1日以来已经过去的刻度。
什么日期比0001年1月1日晚20个?我真的相信它仍然是0001的1月1日。
你现在明白了吗?要解决此问题,您必须使用相同构造函数的另一个重载,可能是允许您传递年份而非刻度的重载。
但请注意,没有构造函数接受年数(人的年龄)。如果一个人是20岁,你就不能超过20岁,而是必须通过2015-20岁作为日期。
我不打算提出解决方案,因为我认为已经有太多的建议。
答案 2 :(得分:0)
你可以简单地使用:
Console.WriteLine(int.Parse(age) + 10);
不创建任何DateTime变量,因为在年龄和时间点之间混合不会有太大意义。
答案 3 :(得分:0)
正如一些人在这里建议的......
如果您只处理年限,则可以使用int
或double
代替DateTime
对象。
Console.WriteLine("Please, enter your age");
string age = Console.ReadLine();
int myNewAge;
int.TryParse(age, out myNewAge);
int yearInFuture = myNewAge + 10;
Console.WriteLine(yearInFuture);
显然,您应该使用try
catch
并检查错误等。
答案 4 :(得分:0)
主要想法是,如果你想增加 age
,你应该减少解析日期,因为它必须远离现在,所以你应该简单地添加负值AddYears
方法。此外,您应该将age
添加到当前日期,如下所示:
Console.WriteLine("Please, enter your age");
string age = Console.ReadLine();
DateTime myNewAge = DateTime.Today.AddYears(-int.Parse(age) - 10);
Console.WriteLine(myNewAge);