我正在试图理解为什么我的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);
}
简答:改变
productTable。长度-2到产品表。长度-1
和
为(i=0; i
说明:
是列表中的最后一个位置(productTable.Lenght
为您提供了列表的长度,因此productTable.Lenght-10
toproductTable.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,优化手段和方法已经略有不同。我们现在的做法是:代码易读是首位,目前还没有碰到同样