我正在尝试将存储在类中的值传递给程序,但我不确定如何!我觉得我差不多完成了这个程序,但是在运行它时它只显示它在实际程序中写的内容,并且它不显示在类变量上存储值的选项。如果有人能帮助我指导我做错了什么,我将不胜感激。
这是我写的课程。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Pet
{
public string Name;
public string Type;
public double Age;
public string setName()
{
Console.WriteLine("Please write your pet's name");
Name = Console.ReadLine();
return Name;
}
public string setType()
{
Console.WriteLine("What type of animal is your pet?");
Type = Console.ReadLine();
return Type;
}
public double getAge()
{
Console.WriteLine("Input your pet's age");
while(!double.TryParse(Console.ReadLine(), out Age))
Console.WriteLine("Please enter a valid number");
return Age;
}
}
}
这是实际的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Pet mypet = new Pet();
mypet.Name = "";
mypet.Type = "";
mypet.Age = 0;
Console.WriteLine("The name of your pet is:" + mypet.Name);
Console.WriteLine("The type of animal your pet is:" + mypet.Type);
Console.WriteLine("The age of your pet is:" + mypet.Age);
}
}
}
答案 0 :(得分:4)
我认为,按照您的代码组织方式,您的程序应如下所示:
class Program
{
static void Main(string[] args)
{
Pet mypet = new Pet();
mypet.setName()
mypet.setType();
mypet.getAge();
Console.WriteLine("The name of your pet is:" + mypet.Name);
Console.WriteLine("The type of animal your pet is:" + mypet.Type);
Console.WriteLine("The age of your pet is:" + mypet.Age);
}
}
顺便说一句,它可以通过以下方式更加一致地命名您的方法:
PromptName();
PromptType();
PromptAge();
这就是他们实际做的事情。注意UpperCamelCase表示法(http://en.wikipedia.org/wiki/CamelCase),这是编写C#代码时的标准。
答案 1 :(得分:1)
您不是要求输入,只是显示输出。
将您的代码更改为
static void Main(string[] args)
{
Pet mypet = new Pet();
mypet.setName();
mypet.setType();
mypet.getAge();
Console.WriteLine("The name of your pet is:" + mypet.Name);
Console.WriteLine("The type of animal your pet is:" + mypet.Type);
Console.WriteLine("The age of your pet is:" + mypet.Age);
}
答案 2 :(得分:1)
您的班级定义可能如下所示:
class Pet
{
public string Name { get; set; }
public string Type { get; set; }
public DateTime DateOfBirth { get; set; }
}
您希望使用自动实现的属性而不是公共字段。您也不希望将输入/输出逻辑放入数据类中!这是糟糕的面向对象设计。
您也不应将年龄存储为年数。年龄应以出生日期表示,以便您始终可以计算年龄。这样,如果您将宠物的信息存储在文件中并在一年后加载,您的程序就会知道您的宠物已经大一岁了。
var myPet = new Pet();
Console.WriteLine("Please write your pet's name");
myPet.Name = Console.ReadLine();
Console.WriteLine("The type of animal your pet is:");
myPet.Type = Console.ReadLine();
DateTime dateOfBirth;
string line;
do
{
Console.WriteLine("The date of birth of your pet:");
line = Console.ReadLine();
} while(DateTime.TryParse(line, out dateOfBirth);
myPet.DateOfBirth = dateOfBirth;
Console.WriteLine("The name of your pet is:", myPet.Name);
Console.WriteLine("The type of animal your pet is: ", myPet.Type);
Console.WriteLine("The age of your pet is:", GetAge(myPet.DateOfBirth));
您可以按如下方式实现GetAge功能:
public static int GetAge(DateTime birthDate)
{
DateTime n = DateTime.Now; // To avoid a race condition around midnight
int age = n.Year - birthDate.Year;
if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
age--;
return age;
}
答案 3 :(得分:0)
在控制台写入之前,您没有调用mypet.setName(),mypet.setType()和mypet.getAge()。
答案 4 :(得分:0)