C# 为什么不';是否将用户输入的最小数字添加到列表中?

C# 为什么不';是否将用户输入的最小数字添加到列表中?,c#,console-application,C#,Console Application,学校里有一次测试,我们必须编写一个C#控制台程序,从用户输入中读取100以下的正整数,然后写出一些细节,比如最大数字。我用一个列表来存储数字。我用我输入的一些随机数进行了测试,但程序只从第二个最小的开始将数字添加到列表中 int count = 0; List<int> bekertek = new List<int>(); int bekert = Convert.ToInt32(Console.ReadLine()); double atlag; while (bek

学校里有一次测试,我们必须编写一个C#控制台程序,从用户输入中读取100以下的正整数,然后写出一些细节,比如最大数字。我用一个列表来存储数字。我用我输入的一些随机数进行了测试,但程序只从第二个最小的开始将数字添加到列表中

int count = 0;
List<int> bekertek = new List<int>();
int bekert = Convert.ToInt32(Console.ReadLine());
double atlag;
while (bekert > 0 && bekert < 100)
{
    bekert = Convert.ToInt32(Console.ReadLine());
    count++;
    bekertek.Add(bekert);
}
/* This section is only for checking the list's elements
foreach (var i in bekertek)
    {
    Console.Write(i + " ");
}*/
Console.WriteLine("A bevitt adatok száma: {0}", count);
bekertek.Sort();
bekertek.Remove(bekertek.Last());
atlag = bekertek.Average();
Console.WriteLine("A legnagyobb érték: {0}", bekertek.Last());
Console.WriteLine("A legkisebb érték: {0}", bekertek.First());
Console.WriteLine("Az adatok átlaga: {0}", atlag);
int count=0;
List bekertek=新列表();
int-bekert=Convert.ToInt32(Console.ReadLine());
双atlag;
而(贝科特>0&&贝科特<100)
{
bekert=Convert.ToInt32(Console.ReadLine());
计数++;
添加(bekert);
}
/*本节仅用于检查列表的元素
foreach(贝克泰克的var i)
{
控制台。写入(i+“”);
}*/
Console.WriteLine(“A bevitt adatok szama:{0}”,count);
bekertek.Sort();
Remove(bekertek.Last());
atlag=bekertek.Average();
WriteLine(“一个legnagyobbérték:{0}”,bekertek.Last());
WriteLine(“一个legkisebbérték:{0}”,bekertek.First());
Console.WriteLine(“Az adatokátlaga:{0}”,atlag);

我做错了什么?

对于控制台中的输入,我认为do…while循环是理想的构造。菜单或请求一个数字-它涵盖了所有这些

至于出了什么问题:实际上它将所有数字添加到集合中(调试代码应该会确认它)。您只需在排序和显示之间从集合中删除最小的编号:

bekertek.Sort();
bekertek.Remove(bekertek.Last());  //Should not have done this.
atlag = bekertek.Average();
有一种说法:“编程中最常见的两个问题是命名变量、查奇失效和关闭一个错误。”

编辑:正如Biesi Grr所指出的,您也会忽略第一个输入:

int bekert = Convert.ToInt32(Console.ReadLine()); //this is never processed
double atlag;
while (bekert > 0 && bekert < 100)
{
    bekert = Convert.ToInt32(Console.ReadLine());
    count++;
    bekertek.Add(bekert);
}
int-bekert=Convert.ToInt32(Console.ReadLine())//这永远不会被处理
双atlag;
而(贝科特>0&&贝科特<100)
{
bekert=Convert.ToInt32(Console.ReadLine());
计数++;
添加(bekert);
}
也许您想在这里使用ReadKey()?也不需要计数器-这实际上是List.Lenght的工作。在任何情况下,一个do..while都会使这条线变得毫无意义

让我们做一个固定的,做…的版本

bool repeat= true;
do{
  int bekert = Convert.ToInt32(Console.ReadLine());
  if(bekert > 0 && bekert < 100)
    bekertek.Add(bekert);
  else
    repeat = false;
}while(repeat )
bool repeat=true;
做{
int-bekert=Convert.ToInt32(Console.ReadLine());
如果(bekert>0&&bekert<100)
添加(bekert);
其他的
重复=错误;
}while(重复)

你所说的
是什么意思?我用输入的一些随机数对它进行了测试,但程序只从第二个最小的开始将数字添加到列表中。还有一点离题:代码很难阅读,因为它结合了英语和匈牙利语(?不是100%确定:)),我自己不是以英语为母语的人,但我用英语编写代码,因为框架等也是用英语编写的。这只是一些建议,与其他方面无关。我用do…while循环更新我的答案。我可能已经找到了解决方案。我没有向bekert变量添加非零值,而是提示用户输入一个数字。但是这个数字没有添加到列表中,因为它发生在while循环之前。这只是一个理论,因为我不能在没有电脑的情况下测试它(我不使用智能手机在上面测试和运行程序)。我回家后会测试它。它也不会添加第一个输入。我想排序
将数字按顺序排列,这样。最后一个将是最高的数字,而不是lowest@EpicKip老实说,我不确定。不管怎样,这都不是一个明智的操作,也可能是导致问题的原因。为了达到规定的目的,必须在分类之前完成。我做了一个小尝试,就像我说的那样。所以
.Last
不会删除最小的数字。@Christopher,除此之外,我同意。如果op只是将.Add和作业从.ReadLine翻转过来,他就不需要在之后删除。