Windows形成计算器算法。排序和最高/最低数字

时间:2017-04-19 06:47:24

标签: c# algorithm sorting

我目前正在使用计算器,但我的两种算法无法正常工作。

  1. 在我的历史记录(列表框)中,我从计算器中获取数字,并且我有一个找到最小数字的底部。我的代码出错了。

  2. 我想要一个[排序]底部,对数字进行升序或降序排序。我已尝试过listbox1.sorted这样的东西,但我只能按字母顺序工作。

  3. 如果你知道我在使用nr.1做错了什么或知道如何修复排序算法,请告诉我。

     int count = 0;
     int tal = 0;
     double Mtal = 999999999999999999;
     bool hit;
     int count1 = 0;
     private void button26_Click(object sender, EventArgs e)
        {
            while (count < 100)
            {
                foreach (var Listboxitem in listBox1.Items)
                {
                    hit = false;
                    if (Convert.ToDouble(Listboxitem) < Mtal)
                    {
    
                        Mtal = Convert.ToDouble(Listboxitem);
                        hit = true;
                    }
                    count = count + 1;
                    if (hit)
                    {
                        count1 = count;
                    }
                }
            }
            this.listBox1.SelectedIndex = count1 - 1;
    
        }
    

1 个答案:

答案 0 :(得分:2)

ListBox中的值是整数。因此,将变量Mtal的声明从double更改为int。然后,而不是Convert.ToDouble()使用int.Parse(),因为您需要整数来与现有的最小值进行比较。 这样的事情对你有用:

 int count = 0;
 int tal = 0;
 int Mtal = int.MaxValue;
 bool hit;
 int count1 = 0;
 private void button26_Click(object sender, EventArgs e)
 {
     while (count < 100)
     {
          foreach (var Listboxitem in listBox1.Items)
          {
             hit = false;
             if (int.Parse(Listboxitem.ToString()) < Mtal)
             {

                 Mtal = int.Parse(Listboxitem.ToString());
                 hit = true;
             }
             count = count + 1;
             if (hit)
             {
                count1 = count;
             }
        }
    }
    this.listBox1.SelectedIndex = count1 - 1;

 }

然后对于Ordering我建议你在List<ListItem>上使用LINQ。以你的例子:

private void button_OrderByDescencing_Click(object sender, EventArgs e)
 {
        List<ListItem> items= new List<ListItem>();
        foreach (ListItem a in lb.Items)
        {
            items.Add(a);
        }
        items=items.OrderByDescending(a => int.Parse(a.Value)).ToList();
        foreach (ListItem a in items)
        {
             listBox1.Items.Add(a);
        }

 }

升序:

 private void button_OrderByAscending_Click(object sender, EventArgs e)
 {
        List<ListItem> items= new List<ListItem>();
        foreach (ListItem a in lb.Items)
        {
            items.Add(a);
        }
        items= items.OrderBy(a => int.Parse(a.Value)).ToList();
        foreach (ListItem a in items)
        {
             listBox1.Items.Add(a);
        }

 }