如何计算列表框中的整数总量并将其显示在标签C#中

时间:2017-12-13 11:16:45

标签: c# visual-studio-2015

在我的C#系统中,我有一个列表框,用户最多可以添加30个整数。我还添加了5个不同的标签,它们是:允许的最大条目:,第一个值:,中间值:,最后一个值:和Count:,count是列表框中整数的总量。我希望看到如何编码这些标签,以便在每个标签中显示值。有人可以帮忙吗?这是我为“添加整数到列表框”所提供的代码。

 int acceptedNum = 0;
 if (txtInsert.Text != "")
 {
    if (lstIntegers.Items.Contains(txtInsert.Text))
    {
       if (!(int.TryParse(txtInsert.Text, out acceptedNum) && acceptedNum < 0 || acceptedNum >= 100))
       {
           lstIntegers.Items.Add(txtInsert.Text);
           txtInsert.Clear();
           txtInsert.Focus();
           bubbleSort();

       }
       else
       {
          MessageBox.Show("Please input value between 1-100", "error", MessageBoxButtons.OK);
          txtInsert.Text = "";
       }
    }
    else
    {
       MessageBox.Show("Number already exists in list", "error", MessageBoxButtons.OK);
    }
  }
  else
  {
     MessageBox.Show("Please input value between 1-100", "error", MessageBoxButtons.OK);
  }
  if (lstIntegers.Items.Count == 30)
  {
      MessageBox.Show("Maximum number of entries exceeded", "error", MessageBoxButtons.OK);
      //button enabled was false however couldn't then add another 
      btnInsert.Enabled = true;
  }
}

1 个答案:

答案 0 :(得分:2)

您可以使用List.Sort来获得正确的排序,不需要使用bubbleSort方法。您可以使用Enumerable.FirstLast和简单数学来获取第一个,最后一个和中间值:

int acceptedNum;
bool validNumber = int.TryParse(txtInsert.Text, out acceptedNum);
if (!validNumber || acceptedNum < 1 || acceptedNum > 100)
{
    MessageBox.Show("Please input value between 1-100", "error", MessageBoxButtons.OK);
    return;
}

List<int> existingNumbers = lstIntegers.Items.Cast<Object>().Select(System.Convert.ToInt32).ToList();
if (existingNumbers.Contains(acceptedNum))
{
    MessageBox.Show("Number already exists in list", "error", MessageBoxButtons.OK);
    return;
}

existingNumbers.Add(acceptedNum);
existingNumbers.Sort(); // Quicksort with 30 items

int firstValue = existingNumbers.First();
int lastValue = existingNumbers.Last();
int middleValue = existingNumbers[existingNumbers.Count / 2];

int count = lstIntegers.Items.Count;
int maxNumbers = 30;
if (count == maxNumbers)
{
   MessageBox.Show("Maximum number of entries exceeded", "error", MessageBoxButtons.OK);
   btnInsert.Enabled = false;
}

lstIntegers.Items.Clear();
lstIntegers.Items.AddRange(existingNumbers.Cast<object>().ToArray());

我已经向您展示了如何预防&#34; spaghetticode&#34;通过颠倒条件并尽早返回。