MATLAB能否在程序运行中手动跳过当前循环?

2024-11-19 阅读 74
更新于 2024年11月21日
一句话:请定义"手"和"动"循环控制Matlab的循环控制语句有两个,分别是for和while。for循环是一种计数循环,while循环是一种条件循环。在循环中,有时候我们需要跳过一些循环,这时候就需要用到continue语句;当我们需要提前结束循环,这时候就需要用到break语句或者return语句。
for循环Matlab的for循环基本语法如下。
for column = Columns
% for each column of Columns, do the following
% ...
if needsToBreak
break
end
if needsToReturn
return
end
if needsToSkipFollowing
contine
end
end在循环过程中,有三种控制循环的方式,其中break直接跳到end的外面;return(在函数里)直接跳出函数;continue则忽略接下来到end的所有代码,进入下一个列的循环。
值得注意的是,for循环被循环数组的列。1:10是一个行向量,所以for i = 1:10循环10次,i从1到10;如果for c = C中C是一个矩阵,那么就是循环C的每一个列。
for i = magic(3), disp(i), end
8
3
4
1
5
9
6
7
2while循环这个循环语法则更为简单,也更加本质。
while conditionExpression
if needsToBreak
break
end
if needsToReturn
return
end
if needsToSkipFollowing
contine
end
end首先检测表达式conditionExpression是否为真,否则跳到对应的end之后。在这个循环体重,同样可以采用break/return/contine进行中断和跳过的操作。
这两种低级的操作太没有水准,今天我们必须高一点高端的跳过循环的操作。
高端的跳过之一这个实现这样的功能,后台计算过程中,有一个进度条,提示计算的当前步骤,提供一个按钮来发送跳过当前步骤的提示,然后的命令窗口进行确认。
这个界面上有一个按钮,这个按钮的文字我还没找到办法修改,按照道理,应该可以找到一个Childeren,改掉那啥...
每次点击取消,就可以把控制权切换到命令行窗口,确认跳过,继续运行。
这个代码里面有几个有意思的函数:
waitbar,产生一个等待进度条窗口,是传统基于Figure的界面的一部分setappdata/getappdata,把数据存储在图形对象中,用一个字符串作为索引,邪路commandwindow把焦点放回命令行窗口,是个很实用的函数gcbf返回回调函数调用的对象,比如delete(gcbf)删掉回调函数对应的图形对象pause,暂停运行若干时间,函数是一个浮点数,则为暂停的秒数这里就是一个典型的while循环用continue跳过部分代码继续运行。从这里也可以看到,恰面的break代码的判断部分,很容易就在while的表达式中隐含。所以,break在for循环中是刚需,在while中有可能简化合并。
源代码function skipExample
cleanObj = onCleanup(@cleanAll);
hWaitbar = waitbar(0, 'Iteration 1', 'Name', 'Solving problem', ...
'CreateCancelBtn', @(~,~)fcn);
hWaitbar.CloseRequestFcn = @(~,~)cleanAll;
setappdata(hWaitbar, 'skip', false);
n = 3;
i = 0;
try
while(ishandle(hWaitbar))
if getappdata(hWaitbar, 'skip')
setappdata(hWaitbar, 'skip', false);
% for keyboard conformation to continue
fprintf("%d - skip this round, ", i)