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的错误。

 

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

相关文章:

  • 2022-12-23
  • 2021-11-21
  • 2021-11-12
  • 2021-08-04
  • 2021-12-24
猜你喜欢
  • 2022-12-23
  • 2021-10-16
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
相关资源
相似解决方案