private void tbimput_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar==(char)13)
{
if(tbimput.Text!="")
{
lbprices.Items.Add(tbunos.Text);
tbprices.Text="";
}
}
}
private void btracunaj_Click(object sender, EventArgs e)
{
int i,n,l,j;
double x,y,max,min;
n = lbprices.Items.Count;
l = lbprices.Items.Count;
x = Convert.ToDouble(lbprices.Items[0]);
y = Convert.ToDouble(lbprices.Items[0]);
max = n;
for(i = 1; i < n; i++)
{
x=Convert.ToDouble(lbprices.Items[i]);
if (x > max)
{
max = x;
}
}
min = l;
for(j=1;j<l;j++)
{
y = Convert.ToDouble(lbprices.Items[j]);
if (y < min)
{
min = y;
}
}
tbmax.Text = Convert.ToString(max);
tbmin.Text = Convert.ToString(min);
}
}
如何使用循环计数在ListBox中查找最大值和最小值。我试过但它没有给我最小值,只给出了最大值。最小值只给了我ListBox中的一些价格。我已经尝试了很长时间但却未能成功。
答案 0 :(得分:1)
一次通过将是最有效的
double max = Convert.ToDouble(lbprices.Items[0]);
double min = max;
for(i = 1; i < lbprices.Items.count; i++)
{
x = Convert.ToDouble(lbprices.Items[i]);
if (x > max)
max = x;
else if (x < min)
min = x;
}
答案 1 :(得分:0)
此代码:
for(j=1;j<l;j++)
y = Convert.ToDouble(lbprices.Items[j]);
if (y < min)
min = y;
应该是:
min = max;
for(j=1;j<l;j++)
{
y = Convert.ToDouble(lbprices.Items[j]);
if (y < min)
min = y;
}
PS。 您应该注意缩进以使代码可读。它可以帮助您避免这样的错误。
答案 2 :(得分:0)
假设您有一个字符串列表 - 或任何IEnumerable<string>
类型:
var x = new List<string> { "1", "2", "3","7389" };
最低限度:var min = x.Min(y => Int32.Parse(y));
最高限额:var max = x.Max(y => Int32.Parse(y)))
如果您没有IEnumerable<string>
但类型可以转换为字符串,则可以先var z = x.Cast<string>();
然后在新列表上执行操作。
答案 3 :(得分:-1)
如果您想以现在的方式或多或少地使用循环,您应该这样做:
max = Int32.MinValue;
for(i = 1; i < n; i++)
{
x=Convert.ToDouble(lbprices.Items[i]);
if (x > max)
{
max = x;
}
}
min = Int32.MaxValue;
for(j=1;j<l;j++)
{
y = Convert.ToDouble(lbprices.Items[j]);
if (y < min)
{
min = y;
}
}
如果你想用Linq做一些更干净的事情,你可以这样做:
var orderedItems = lbprices.Items.Select(x => Convert.ToDouble(x)).OrderBy(x => x);
var min = orderedItems.First();
var max = orderedItems.Last();
或者,甚至更清洁,@ Andrej使用.Min()和.Max():
var items = lbprices.Items.Select(x => Convert.ToDouble(x));
var min = items.Min();
var max = items.Max();