如何显示阵列已满

我正在研究一个简单的代码,要求提供最多5位患者的姓名,年龄和性别。每位患者后,应要求输入另一位患者或返回主菜单。一旦将5输入到数组中,应该会提示用户数组已满。如何显示阵列已满

我的问题是代码要求名称,年龄和性别前5次,并没有给出任何指示数组已满。我将如何更改代码以反映并仍然保存输入? (代码如下)。


class MainClass 

{

enum Gender { female, male }

struct Record

{

public string _Name;

public int _Age;

public Gender _Gender;

}

public static void Main(string[] args)

{

//title

Console.Write("\t\t\t\t\tPatient Records\n");

string selection = "";

Record[] patients = new Record[5];

GetRecords(patients);

Console.Write("a. Add\n d.Display\ns. Stats\nq. Quit");

Console.Write("Your selection: ");

selection = Console.ReadLine();

switch (selection)

{

case "a":

GetRecords(patients);

break;

case "d":

break;

case "s":

Stats(patients);

break;

case "q":

//CUtility.Pause();

break;

}

}

static void GetRecords(Record[] patient_rec)

{

for (int i = 0; i < patient_rec.Length; i++)

{

Console.Write("Enter your age: ");

int.TryParse(Console.ReadLine(), out patient_rec[i]._Age);

Console.Write("Enter your name: ");

patient_rec[i]._Name = Console.ReadLine();

Console.Write("Enter your gender (female or male): ");

Gender.TryParse(Console.ReadLine(), out patient_rec[i]._Gender);

}

}

static void Stats(Record[]patient_rec)

{

}

}

回答:

你的循环设置为仅转到数组的大小,因此在逻辑上你可以展示在循环后的消息(这将让循环完成时命中)。

如果你控制一个while循环的数组访问那么你的索引i只是比较的阵列(patient_rec.Length)的长度,如果等于或超过,则长度显示信息。

回答:

我会做一个简单的方法:

enum Gender { female, male } 

struct Record

{

public string _Name;

public int _Age;

public Gender _Gender;

}

static void Main(string[] args)

{

//title

Console.Write("\t\t\t\t\tPatient Records\n");

IList<Record> patients = GetRecords(5);

SchedulePatients(patients);

}

static void SchedulePatients(IList<Record> patients)

{

Console.Write("a. Add\n d.Display\ns. Stats\nq. Quit");

Console.Write("Your selection: ");

string selection = Console.ReadLine();

switch (selection)

{

case "a":

patients.Add(GetRecord());

SchedulePatients(patients);

break;

case "d":

break;

case "s":

Stats(patients);

break;

case "q":

//CUtility.Pause();

break;

}

}

static IList<Record> GetRecords(int amount)

{

IList<Record> patients = new List<Record>();

for (int i = 0; i < amount; i++)

{

patients.Add(GetRecord());

}

return patients;

}

static Record GetRecord()

{

Record patient = new Record();

Console.Write("Enter your age: ");

int.TryParse(Console.ReadLine(), out patient._Age);

Console.Write("Enter your name: ");

patient._Name = Console.ReadLine();

Console.Write("Enter your gender (female or male): ");

Enum.TryParse(Console.ReadLine(), out patient._Gender);

return patient;

}

static void Stats(IList<Record> patients)

{

foreach (var patient in patients)

{

Console.WriteLine(string.Concat("Name: ", patient._Name, " Age: ", patient._Age, " Gender: ", patient._Gender));

}

Console.ReadLine();

}

}

回答:

如果您想满足的最小变化的要求可能,你只需要添加有关提示用户该位。

static void GetRecords(Record[] patient_rec) 

{

for (int i = 0; i < patient_rec.Length; i++)

{

Console.Write("Enter your age: ");

int.TryParse(Console.ReadLine(), out patient_rec[i]._Age);

Console.Write("Enter your name: ");

patient_rec[i]._Name = Console.ReadLine();

Console.Write("Enter your gender (female or male): ");

Gender.TryParse(Console.ReadLine(), out patient_rec[i]._Gender);

Console.Write("Enter another (Y/N)? ");

var s = Console.ReadLine();

if (s.ToUpper() != "Y") return;

}

Console.WriteLine("You've entered the maximum number of records.");

}

回答:

我建议试着让你的代码更容易阅读 - 并且更健壮。

试试这个:

static void GetRecords(Record[] patient_rec) 

{

for (int i = 0; i < patient_rec.Length; i++)

{

Console.WriteLine("Record {0} of {1} entry", i + 1, patient_rec.Length);

patient_rec[i] = new Record()

{

_Age = AskInteger("Enter your age: "),

_Name = AskString("Enter your name: "),

_Gender = AskGender("Enter your gender (female or male): "),

};

string ask = "";

while (string.IsNullOrEmpty(ask) || (ask.ToLower()[0] != 'y' && ask.ToLower()[0] != 'n'))

{

Console.WriteLine("Continue? yes or no (then hit enter)");

ask = Console.ReadLine();

}

if (ask.ToLower()[0] == 'y')

{

continue;

}

break;

}

Console.WriteLine("Thank you. Input completed.");

}

为了使这项工作,你需要这三个输入功能:

private static int AskInteger(string message) 

{

int result;

Console.WriteLine(message);

string input = Console.ReadLine();

while (!int.TryParse(input, out result))

{

Console.WriteLine("Invalid input.");

Console.WriteLine(message);

input = Console.ReadLine();

}

return result;

}

private static string AskString(string message)

{

Console.WriteLine(message);

string input = Console.ReadLine();

while (string.IsNullOrWhiteSpace(input))

{

Console.WriteLine("Invalid input.");

Console.WriteLine(message);

input = Console.ReadLine();

}

return input;

}

private static Gender AskGender(string message)

{

Gender result;

Console.WriteLine(message);

string input = Console.ReadLine();

while (!Gender.TryParse(input, out result))

{

Console.WriteLine("Invalid input.");

Console.WriteLine(message);

input = Console.ReadLine();

}

return result;

}

以上是 如何显示阵列已满 的全部内容, 来源链接: utcz.com/qa/259327.html

回到顶部