C # Использование объектов в других классах и их отображение * ПЕРЕСМОТРЕНО - PullRequest
0 голосов
/ 20 февраля 2019

У меня проблемы с отображением свойств объекта и передачей их между классами.У меня также возникают проблемы при получении сообщения об ошибке из набора методов.Кажется, я могу ввести что угодно без ошибки.Я знаю, что проблема может иметь что-то в объекте, потому что я просто получаю пустые имена переменных, когда пытаюсь отобразить это.

    namespace Project
{
    class Program
    {
        static void Main(string[] args)
        {
            string name;
            double strength = 0;
            double dexterity = 0;
            double hitPoints = 0;
            double armor = 0;

            Console.WriteLine("--WELCOME TO THE BATTLE--\n");

                Console.WriteLine("Please enter the statistics for warrior one.");
                Console.WriteLine("Name: ");
                name = Console.ReadLine();
                Console.WriteLine("Strength: ");
                strength = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Dexterity: ");
                dexterity = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Hit Points: ");
                hitPoints = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Armor: ");
                armor = Convert.ToDouble(Console.ReadLine());
                Warrior warriorOne = new Warrior(name, strength, dexterity, hitPoints, armor);

                Console.WriteLine("\nPlease enter the statistics for warrior two.");
                Console.WriteLine("Name: ");
                name = Console.ReadLine();
                Console.WriteLine("Strength: ");
                strength = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Dexterity: ");
                dexterity = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Hit Points: ");
                hitPoints = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Armor: ");
                armor = Convert.ToDouble(Console.ReadLine());
                Warrior warriorTwo = new Warrior(name, strength, dexterity, hitPoints, armor);

            Console.WriteLine("\nWarriors:\n" + warriorOne.Name + "--" + "Strength " + warriorOne.Strength + ", Dexterity " + warriorOne.Dexterity + ", HitPoints " + warriorOne.HitPoints + ", Armor " + warriorOne.Armor);
            Console.WriteLine("\nWarriors:\n" + warriorTwo.Name + "--" + "Strength " + warriorTwo.Strength + ", Dexterity " + warriorTwo.Dexterity + ", HitPoints " + warriorTwo.HitPoints + ", Armor " + warriorTwo.Armor);

            Battlefield.Battle(warriorOne, warriorTwo);
        }
    }
    class Warrior
    {
        private double strength;
        private double dexterity;
        private double hitPoints;
        private double armor;

        public Warrior(string name, double strength, double dexterity, double hitPoints, double armor)
        {
            name = Name;
            this.strength = Strength;
            this.dexterity = Dexterity;
            this.hitPoints = HitPoints;
            this.armor = Armor;
        }
        public string Name { get; set; }
        public double Strength
        {
            get
            {
                return strength;
            }
            set
            {
                while (value < 10 & value > 20)
                {
                    Console.WriteLine("Strength has a range of 10-20. Please re-enter: ");
                    value = Convert.ToDouble(Console.ReadLine());
                }
                strength = value;
            }
        }
        public double Dexterity
        {
            get
            {
                return dexterity;
            }
            set
            {
                while (value < 10 & value > 20)
                {
                    Console.WriteLine("Dexterity has a range of 10-20. Please re-enter: ");
                    value = Convert.ToDouble(Console.ReadLine());
                }
                dexterity = value;
            }
        }
        public double HitPoints
        {
            get
            {
                return hitPoints;
            }
            set
            {
                while (value < 10 & value > 20)
                {
                    Console.WriteLine("Hit points have a range of 10-20. Please re-enter: ");
                    value = Convert.ToDouble(Console.ReadLine());
                }
                hitPoints = value;
            }
        }
        public double Armor
        {
            get
            {
                return armor;
            }
            set
            {
                while (value < 0 & value > 5)
                {
                    Console.WriteLine("Armor has a range of 0-5. Please re-enter: ");
                    value = Convert.ToDouble(Console.ReadLine());
                }
                armor = value;
            }
        }
    }
    class Battlefield
    {
        public static void Battle(Warrior warriorOne, Warrior warriorTwo)
        { Console.WriteLine(warriorOne.Name); }
}

1 Ответ

0 голосов
/ 20 февраля 2019

Одна проблема связана с вашим классом Warrior в конструкторе, где вы пытаетесь установить свойство Name.У вас есть это (я только включил соответствующие биты):

public Warrior(string name)
{
    name = Name;
}

public string Name { get; set; }

Обратите внимание, что вы НЕ устанавливаете здесь свойство Name.Вы устанавливаете аргумент name равным свойству Name (которое, вероятно, null).

Чтобы исправить это, просто переключите порядок вокруг назначения:

public Warrior(string name)
{
    Name = name;
}

Возможно, вы захотите проверить и все остальные ваши свойства (похоже, это была распространенная ошибка, когда выИмейте свойство, которое вы пытаетесь установить на правой стороне = вместо левой ).

Помните, что вы почти всегда должны назначать общедоступный метод доступа (заглавный), чтобы ваш код set работал.Старайтесь не изменять частное вспомогательное поле, кроме как из свойства set method.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...