我正在努力让这个程序完成但仍然遇到问题,我无法弄清楚如何获得结果的排名,我一直得到1输出我想要完成这个我会尽快。输出应该如下所示:
输入数据文件的目录路径:C:\ Intel
输入年份:2010年
输入性别(M / F):M
输入名称:Javier
Javier在2010年排名第190位
if
答案 0 :(得分:0)
您的程序输出太多,因为您正在打印“名称”+名称 对于每个不匹配的名称,+“未按年份排列”+年“。
您需要添加一个标记来记录您是否在查看列表时找到了该名称,如下所示:注意我还添加了break
关键字 - 一旦找到了名称,就没有必要了继续寻找。
您还需要从i
中减去1到输出,因为您的列表从0开始,我希望您不希望从零开始排名?
class Program
{
static void Main(string[] args)
{
List<string> names = new List<string>();
string filename = @"c:\temp\baby.txt";
string year = "1997";
string gender = "F";
string name = "Margaret";
string line = "";
try
{
using (StreamReader fin = new StreamReader(filename))
{
while((line = fin.ReadLine()) != null)
{
string[] parsed = line.Split(',');
if (parsed[1] == gender)
{
names.Add(parsed[0]);
}
}
}
bool foundName = false;
for (int i = 0; i < names.Count; i++)
{
if (names[i] == (name))
{
Console.WriteLine(name + " is ranked #" + i-1 + " in year " + year);
foundName = true;
break;
}
}
if (!foundName)
{
Console.WriteLine("The name " + name
+ " is not ranked in year " + year);
}
}
catch(Exception e )
{
Console.WriteLine("The file at {0} could not be read."+ e, filename);
}
for(int c = 0; c < names.Count; c++)
{
Console.WriteLine((c + 1) + ". " + names[c]);
}
Console.ReadKey();
}
}
输出:
玛格丽特在1997年排名第4 Doris这个名字在1997年没有排名
注意: