Что я использую для аргументов при вызове конструктора в 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.