我目前正在使用计算器,但我的两种算法无法正常工作。
在我的历史记录(列表框)中,我从计算器中获取数字,并且我有一个找到最小数字的底部。我的代码出错了。
我想要一个[排序]底部,对数字进行升序或降序排序。我已尝试过listbox1.sorted这样的东西,但我只能按字母顺序工作。
如果你知道我在使用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;
}
答案 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);
}
}