我有一个程序,用户可以将数字输入到用户也可以获取的列表框中,并选择对列表框进行排序。我不允许使用任何数组或容器或列表,只需修改项目列表框属性并使用转换和解析。我想通过冒泡排序来做到这一点,虽然点击排序按钮后只显示在列表框上的数字是0,1,2,3,4 ......
private void sorted()
{
int a = Convert.ToInt32(lstHoldValue.Items.Count);
int temp = Convert.ToInt32(lstHoldValue.Items[0]);
for (int i = 0; i < a; i++)
{
for (int j = i + 1; j < a; j++)
{
if (Convert.ToInt32(lstHoldValue.Items[i]) > Convert.ToInt32(lstHoldValue.Items[j]))
{
temp = Convert.ToInt32(lstHoldValue.Items[i]);
(lstHoldValue.Items[i]) = Convert.ToInt32(lstHoldValue.Items[j]);
(lstHoldValue.Items[j]) = temp;
}
}
}
lstHoldValue.Items.Clear();
for (int i = 0; i < a; i++)
{
Convert.ToInt32(lstHoldValue.Items.Add("\t" + i));
}
}
用户如何在列表框中输入值
private void btnAdd_Click(object sender, EventArgs e)
{
string text = "\t" + txtInitialise.Text;
if (this.index < MAX_ITEMS) // MAX_ITEMS or 10
{
Convert.ToInt32(lstHoldValue.Items.Count);
int dnum;
if (int.TryParse(txtInitialise.Text, out dnum))
{
Convert.ToInt32(lstHoldValue.Items.Add( "\t" + dnum));
index++;
txtInitialise.Text = "";
答案 0 :(得分:0)
好像你只是将List项的索引添加到List中,这就是它总是返回0 - 4(5个元素)的原因。更新了答案,仅使用列表项进行排序。
<强>更新强>
允许插入列表框的最大项目数:
const int MAX_ITEMS = 10;
您排序的方法工作正常,但最后清除了列表框,因此您丢失了排序,因为使用for循环在列表框内完成了交换:
private void sorted()
{
int a = Convert.ToInt32(lstHoldValue.Items.Count);
int temp = Convert.ToInt32(lstHoldValue.Items[0]);
for (int i = 0; i < a; i++)
{
for (int j = i + 1; j < a; j++)
{
if (Convert.ToInt32(lstHoldValue.Items[i]) > Convert.ToInt32(lstHoldValue.Items[j]))
{
temp = Convert.ToInt32(lstHoldValue.Items[i]);
(lstHoldValue.Items[i]) = "\t" + Convert.ToInt32(lstHoldValue.Items[j]);
(lstHoldValue.Items[j]) = "\t" + temp;
}
}
}
}
点击添加按钮:
private void btnAdd_Click(object sender, EventArgs e)
{
int index = 0;
if (index < MAX_ITEMS) // MAX_ITEMS set to 10
{
int dnum;
if (int.TryParse(txtInitialise.Text, out dnum))
{
lstHoldValue.Items.Add("\t" + dnum);
index++;
txtInitialise.Text = "";
}
}
}
排序按钮点击:
private void btnSort_Click(object sender, EventArgs e)
{
sorted();
}