当前位置: 首页 > 知识库问答 >
问题:

为什么我的Bubblesort代码在结构后面需要-2。它工作的长度?

苏墨竹
2023-03-14

我正在试图理解为什么我的productTable。我的bubblesort代码的长度必须为-2才能工作。

我创建了两个int变量,Last_Position和i。我创建了一个名为temp的产品变量和一个名为交换的bool,它被设置为false。然后,我将Last_Position设置为相等productTable。长度-2。

这就是我无法理解的地方,从我读过的文章来看。长度计算字符数并返回字符数。但是,由于编程中1计为0,因此必须-1才能使上限准确(即1000=999),直到这一部分为止,上限一直保持为真。

由于某些原因,-1在程序针对此代码运行时将抛出错误:if(String.Compare(productTable[i].prodCode,productTable[i 1].prodCode)

当我将代码设置为-2时,代码可以工作,但我想了解为什么会这样。

    struct product
    {
        public string prodCode;
        public string description;
        public double price;
        public int quantity;
    }

    product[] productTable;

    public void loadData()
    {
        string path = "C:\\Users\\5004303\\Documents\\productFile.csv";
        int lineCount = File.ReadLines(path).Count();
        productTable = new product[lineCount];
        product currentProduct = new product();

        try
        {
            StreamReader sr = new StreamReader(path);

            string line;
            int currentArrayLocation = 0;

            while (!sr.EndOfStream)
            {
                line = sr.ReadLine();
                string[] fields = line.Split(',');
                currentProduct.prodCode = fields[0];
                currentProduct.description = fields[1];
                currentProduct.price = Convert.ToDouble(fields[2]);
                currentProduct.quantity = Convert.ToInt32(fields[3]);
                productTable[currentArrayLocation] = currentProduct;
                currentArrayLocation++;
            }
            sr.Close();
        }
        catch (FileNotFoundException)
        {
            MessageBox.Show("An error occured. Could not find file 'productFile.csv'.");
        }
    }

    public void listProducts()
    {
        int currentArrayLocation = 0;

        for (currentArrayLocation = 0; currentArrayLocation < productTable.Length; currentArrayLocation++)
        {
            ListViewItem lvi = new ListViewItem();
            lvi.Text = productTable[currentArrayLocation].prodCode;
            lvi.SubItems.Add(Convert.ToString(productTable[currentArrayLocation].description));
            lvi.SubItems.Add(Convert.ToString(productTable[currentArrayLocation].price));
            lvi.SubItems.Add(Convert.ToString(productTable[currentArrayLocation].quantity));
            lvProducts.Items.Add(lvi);
        }
    }

    public void bubbleSort()
    {
        int last_Postion, i;
        product temp;
        last_Postion = productTable.Length - 2;
        Boolean swap = false;

        do
        {
            swap = false;
            for (i = 0; i <= last_Postion; i++)
            {
                if (String.Compare(productTable[i].prodCode, productTable[i + 1].prodCode) > 0)
                {
                    temp = productTable[i];
                    productTable[i] = productTable[i + 1];
                    productTable[i + 1] = temp;
                    swap = true;
                }
            }
        }
        while (swap == true);
    }

共有1个答案

云承弼
2023-03-14

简答:改变

productTable。长度-2到产品表。长度-1

为(i=0; i

说明:

productTable.Lenght为您提供了列表的长度,因此productTable.Lenght-1是列表中的最后一个位置(0toproductTable.Lenght-1)。

在您针对i 1进行测试时,在内的for循环中,所以i只能上升到last_position-1

在代码中,当i==last_position然后i 1超出列表中的最后一个位置时。

注意:我没有检查您的代码的有效性,即使您进行了这些更改,也可能存在其他错误。

注意样式,C#编码指南通常为变量名指定驼峰大小写,最好使用lastPosition而不是lastPosition。代码中还有其他样式“错误”,例如在函数顶部声明变量,使用类型而不是var。可能其中一些“错误”是课程要求,但对任何编码约定文件(例如。https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions)会对你有好处的。大多数工作场所都有自己的编码准则或采用公共准则,但在所有准则上都非常相似。

 类似资料:
  • 问题内容: 我有一个将对象保存到数据库的EJB。在我看到的一个示例中,一旦保存了此数据(EntityManager.persist),就会调用EntityManager.flush();。为什么我需要这样做?我要保存的对象未附加,以后在该方法中也不会使用。实际上,一旦保存,该方法就会返回,并且我希望资源会被释放。(示例代码也在remove调用上执行此操作。) 问题答案: 调用将强制数据立即被持久保

  • 本文向大家介绍为什么需要在React.js中构建工作流程,包括了为什么需要在React.js中构建工作流程的使用技巧和注意事项,需要的朋友参考一下 在做下面的事情时建立工作流程帮助 它优化代码 使用下一代JavaScript(ES6) 这是单页/多页应用程序的标准方法 生产方法 轻松将依赖项与NPM或Yarn集成 使用打包器(如Web-pack)来简化模块化代码和运输代码 像Babel这样的预编译

  • 问题内容: 为什么需要放入GUI更新代码? 为什么Swing本身无法在内部对其进行处理?为什么调用者必须关心swing如何处理UI更新? 问题答案: 摆动对象不是线程安全的。顾名思义,允许在以后的某个时间执行任务;但更重要的是,该任务将在AWT事件分配线程上执行。使用时r,任务是异步执行的;还有,直到任务完成执行后才会返回。

  • 我正在尝试理解Struts2中类的使用。 查看API: 类是否包含与我从获取的请求参数不同的请求参数集? 拦截器的struts似乎首先调用了,然后调用了,但我看不到这样做的任何理由。

  • Lua 的解析器有官方的 standard Lua 和 LuaJIT,需要明确一点的是目前大量的优化文章都比较陈旧,而且都是针对 standard Lua 解析器的,standard Lua 解析器在性能上需要书写者自己规避,才能写出高性能来。需要各位看官注意的是,OpenResty 最新版默认已经绑定 LuaJIT,优化手段和方法已经略有不同。我们现在的做法是:代码易读是首位,目前还没有碰到同样