当我们执意想通过循环来删除列表中所有项,例如:
列表L,列表中的元素的个数也做长度length;
有些人或许会想到如想方法:
for(i=0;i<L.length;i++)
{
dlelete L[0];
}
乍看起来,似乎“循环执行的次数等于列表元素的个数,也就说我们每次都删除第一项元素,而且我们执行了所需的次数”,因此应该可以实现删除全部列表元素的功能,但是运行后才发现:总会有剩余元素;
不妨仔细想一想,上面的删除语句确实执行了L.length次吗? 结果证明没有,那么为什么呢?
其实就是因为一般的循环中,只有i在变化,而决定循环的次数的量(这里是L.length)是不能变的,正因如此,本题中L.length每执行一次都会相应的减1,与此同时i也照常增加1,显然这样的结果是循环的次数减少了.也就造成了上述问题.
部分老师,讲解该问题时:帮学生想到一个办法:
int N=L.length;
for(i=0;i<N;i++)
{
delete L[0];
}
显然,这样能够实现删除全部列表元素的功能. 这也非常容易理解.
不过,只要理解了,上述观点,我们不难想出另外一个办法:
for(i=0;i<L.length;i=0)
{
delete L[0];
}
看起来,实现的方法好像很不同,其实利用了同一个道理:决定循环次数的i和i的终止值间只能有一个变化,循环的次数才能达到预期……