【问题标题】:Bubble sort for Listbox not working C#列表框的冒泡排序不起作用 C#
【发布时间】:2016-11-19 22:30:10
【问题描述】:

我有一个程序,用户可以在其中输入数字到用户也获得的列表框中,并选择对列表框进行排序。我不允许使用任何数组或容器或列表,只需修改项目列表框属性并使用转换和解析。我想通过冒泡排序来做到这一点,尽管在单击排序按钮后仅显示在列表框中的数字是 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 = "";

【问题讨论】:

  • 欢迎来到 Stack Overflow!看来您需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果您之后仍有问题,请随时回来提供更多详细信息。
  • 对不起,我对这一切都很陌生,我仍然不知道出了什么问题:(
  • 你能帮帮 Joe C 吗?
  • 你读过这篇文章吗?

标签: c# wpf sorting listbox


【解决方案1】:

似乎您只是将列表项的索引添加到列表中,这就是它总是返回 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();
}

【讨论】:

  • 嗨,阿卜杜勒,感谢您的帮助,虽然我不允许使用任何容器或列表,只允许修改项目列表框属性并使用解析和转换。我已经完成了这个程序有一个数组,但现在必须重新做:(
  • 我完全更改了代码,它可以工作,但不能完全确定它是否在我的工作范围内。你会怎么做?
  • 你需要保留制表位吗?
  • 天哪,谢谢阿卜杜勒!你是一个真正的兄弟。我们应该是朋友:))
猜你喜欢
  • 2015-01-02
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 2021-12-30
相关资源
最近更新 更多