For和While在C和MATLAB中的区别——MATLAB的大坑

For和while是常见的循环关键字,在许多语言中都是通用的。但是想必不是所有人,都被其中的区别困扰过,尤其是MATLAB“程序员”。

1 x=[1,2,3,4,5,6,7];
2 i=1;
3 while i<=length(x)
4     x(i)=[];
5     i=i+1;
6 end
7 i

这段代码的运行结果是

i=

  5

i在递增,而MATLAB在每次循环都调用了length(x),因此length(x)在递减。

i: 1 2 3 4 5

length(x) 7 6 5 4 3

当i=5时跳出循环。

再看for这个大坑。测试代码为:

x=[1,2,3,4,5,6,7];
for i=1:length(x)
    x(i)=[];
end
i

运行结果是这样的:

??? Error: File: Untitled.m Line: 2 Column: 7

Unexpected MATLAB operator.

程序只计算了length(x)一次,因此每次进入循环是i都要与最初的7=length(x)比较,因此报了ArrayOutOfRange的错误。

事后诸葛亮:编程的时候,千万不能想当然。