Что я использую для аргументов при вызове конструктора в C#?

У меня есть задание в моем вступительном классе, где мне нужно запросить у пользователя имя, фамилию, год рождения и текущий год. Программа должна выводить информацию обратно пользователю вместе с рассчитанным возрастом, максимальным сердечным ритмом (220 - возраст) и целевым диапазоном сердечного ритма (от 50% до 85%). Мой класс должен иметь конструктор, который получает введенные данные в качестве параметров. У каждого атрибута должны быть значения get/sets и должны быть свойства для расчета возраста, максимальной частоты сердечных сокращений и целевого диапазона. Это то, что я до сих пор. Я думаю, что сделал то, что он просит, но я не уверен, какие аргументы использовать при вызове конструктора. Или, может быть, я неправильно понимаю концепцию здесь.

Спасибо заранее за любые советы.

using System;

namespace Assignment2
{
    public class HeartRates
    {
        private string firstname;
        private string lastname;
        private int birthyear;
        private int currentyear;
        private int age;
        private double maxrate;
        private double mintarget;
        private double maxtarget;

        public string Firstname
        {
            get { return firstname; }
            set { firstname = value; }
        }

        public string Lastname
        {
            get { return lastname; }
            set { lastname = value; }
        }

        public int Birthyear
        {
            get { return birthyear; }
            set { birthyear = value; }
        }

        public int Currentyear
        {
            get { return currentyear; }
            set { currentyear = value; }

        }

        public int Age
        {
            get { return currentyear - birthyear; }
            set { age = currentyear - birthyear; }
        }

        public double MaxRate
        {
            get { return 220 - Age; }
            set { maxrate = value; }
        }

        public double MinTarget
        {
            get { return MaxRate * .5; }
            set { mintarget = value; }
        }
        public double MaxTarget
        {
            get { return MaxRate * .85; }
            set { maxtarget = maxrate * .85; }
        }
        public HeartRates(string firstname, string lastname, int birthyear, int currentyear)
        {
            Console.WriteLine("Please enter your first name:");
            this.firstname = Console.ReadLine();
            Console.WriteLine("Please enter your last name:");
            this.lastname = Console.ReadLine();
            Console.WriteLine("Please enter your birth year:");
            this.birthyear = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Please enter the current year:");
            this.currentyear = Convert.ToInt32(Console.ReadLine());
        }
    }

    public class Program
    {
        public static void Main()
        {
            HeartRates newheartrates = new HeartRates();

            Console.WriteLine("Your name is {0} {1}, you were born in {2}, the current year is {3}", newheartrates.Firstname, newheartrates.Lastname, newheartrates.Birthyear, newheartrates.Currentyear);
            Console.WriteLine("Your age is {0}", newheartrates.Age);
            Console.WriteLine("Your maximum heart rate is {0}", newheartrates.MaxRate);
            Console.WriteLine("Your target heart rate range is from {0} to {1}.", newheartrates.MinTarget, newheartrates.MaxTarget);
        }
    }
}

2 ответа

Сначала получите пользовательские данные (внутри вашего основного метода, а не в конструкторе):

Console.WriteLine("Please enter your first name:");
string firstname = Console.ReadLine();
Console.WriteLine("Please enter your last name:");
string lastname = Console.ReadLine();
Console.WriteLine("Please enter your birth year:");
int birthyear = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please enter the current year:");
int = currentyear = Convert.ToInt32(Console.ReadLine());

Затем позвоните своему конструктору:

HeartRates newheartrates = new HeartRates(firstname,lastname,birthyear,currentyear);

И измените свой конструктор:

public HeartRates(string firstname, string lastname, int birthyear, int currentyear)
{
     this.firstname = firstname;
     this.lastname = lastname;
     this.birthyear = birthyear;
     this.currentyear = currentyear;
}

Вы на правильном пути, но я думаю, что вы немного смущены.

Вы должны переместить эту часть

        Console.WriteLine("Please enter your first name:");
        this.firstname = Console.ReadLine();
        Console.WriteLine("Please enter your last name:");
        this.lastname = Console.ReadLine();
        Console.WriteLine("Please enter your birth year:");
        this.birthyear = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Please enter the current year:");
        this.currentyear = Convert.ToInt32(Console.ReadLine());

К вашей основной функции.

Затем используйте созданный вами конструктор.

HeartRates newheartrates = new HeartRates(firstname, lastname, birthyear, currentyear);

То, что у вас есть, может работать, но 1) вы не вызываете созданный вами конструктор, вы вызываете конструктор без параметров. Обычно не требуется ввод данных пользователем в конструкторы объектов. Имеет больше смысла сделать это в основной функции и сохранить ваш ввод / вывод вместе.

Надеюсь, это поможет, добро пожаловать в Stackru.

Другие вопросы по тегам