0

クラスに格納された値をプログラムに渡そうとしていますが、方法がわかりません! このプログラムの完成にとても近づいたと感じましたが、実行すると、実際のプログラムに書かれている内容が表示されるだけで、クラス変数に値を格納するオプションは表示されません。誰かが私が間違っていることを教えてくれるなら、それは大歓迎です。

これが私が書いたクラスです。

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);
        }
    }
}
4

5 に答える 5

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();

それが彼らが実際にしていることだからです。C# コードを記述する際の標準であるUpperCamelCase 表記 ( http://en.wikipedia.org/wiki/CamelCase ) に注目してください。

于 2013-10-30T17:04:27.673 に答える
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);

    }
于 2013-10-30T17:03:52.050 に答える
1

クラス定義はおそらく次のようになります。

class Pet
{
    public string Name { get; set; }
    public string Type { get; set; }
    public DateTime DateOfBirth { get; set; }
}

パブリック フィールドの代わりに、自動実装されたプロパティを使用したい。また、入力/出力ロジックをデータ クラスに入れたくありません。それは悪いオブジェクト指向設計です。

また、年齢を年数として保存しないでください。いつでも年齢を計算できるように、年齢は生年月日で表す必要があります。そうすれば、ペットの情報をファイルに保存して 1 年後に読み込むと、プログラムはペットが 1 歳年上であることを認識します。

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;
}
于 2013-10-30T17:05:26.113 に答える
0

コンソールが書き込む前に、mypet.setName()、mypet.setType()、mypet.getAge() を呼び出す必要はありません。

于 2013-10-30T17:05:19.577 に答える
0

プロパティを正しく実装していません。http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspxを参照してください。

于 2013-10-30T17:06:04.130 に答える