【问题标题】:Get numbers from txt in a list and then sort the list C# [closed]从列表中的txt获取数字,然后对列表进行排序C# [关闭]
【发布时间】:2018-06-25 12:56:06
【问题描述】:

我有一个整数一个在另一个之下的文本,我想把它们放在List<int> 中。

然后我想对List<int> 进行排序并取第一个元素。

我尝试了这段代码,但出了点问题,没有显示最高分。

int k;
List<int> scores = new List<int>();
using (var sr = new StreamReader("score.txt"))
{
    while (sr.Peek() >= 0)
        k = int.Parse(sr.ReadLine());
        scores.Add(k);
}
scores.Sort();
MessageBox.Show("highest score " + scores[0]);

【问题讨论】:

  • 代码做了什么?你想让它做什么?
  • “但是出了点问题” - 或许您想更详细地描述问题?
  • 此代码不采用列表的最大 int。我想显示最高分!
  • @dimath:看起来您的整个代码都可以替换为:MessageBox.Show($"highest score {File.ReadAllLines("score.txt").Select(s =&gt; int.Parse(s)).Max()}"); 尽管将内容放在单独的行中以进行支持和调试当然很好。但是当您这样做时,该过程的一个重要部分是在调试器中逐步执行代码并观察正在发生的事情。不要只是运行整个事情并说“我没有得到预期的结果,我需要帮助。”调试。观察。查看每个操作在做什么。当您遇到错误的特定代码行时,请专注于此。
  • 你缺少{},因此只添加最后一个分数while (sr.Peek() &gt;= 0){ k = int.Parse(sr.ReadLine()); scores.Add(k); }并使用.Max()方法,即scores.Max()

标签: c# list sorting


【解决方案1】:

while 循环中缺少大括号。

int k;
List<int> scores = new List<int>();

using (var sr = new StreamReader("score.txt"))
{
    while (sr.Peek() >= 0)
    {
        k = int.Parse(sr.ReadLine());
        scores.Add(k);
    }
}
scores.Sort();
MessageBox.Show("highest score " + scores[0]);

虽然在 Python 等语言中,单独缩进是您将某些内容移入和移出 while 循环的方式,但 C# 会忽略空格,因此您输入的内容实际上应该缩进为:

while (sr.Peek() >= 0)
    k = int.Parse(sr.ReadLine());
scores.Add(k);

如,k = int.Parse(sr.ReadLine()); 是循环的一部分,而scores.Add(k); 只执行一次。

【讨论】:

  • .. 从中吸取的教训是总是添加大括号
  • 您应该以 TYPO 的身份投票结束,恕我直言并没有增加太多价值
  • 非常感谢大家,现在代码工作正常
  • @dimath 很高兴听到。如果你得到一个有帮助的答案,你应该点击这个答案左上角的向上箭头(真的是三角形)来投票,然后点击向下箭头下方的复选标记将其标记为正确答案以帮助未来可能有同样问题的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2012-05-21
  • 2016-05-06
  • 2021-06-28
相关资源
最近更新 更多