循环控制 #
一、break语句 #
1.1 基本用法 #
break语句用于立即退出当前循环:
matlab
% for循环中使用break
for i = 1:10
if i == 5
break;
end
disp(i);
end
% 输出: 1 2 3 4
1.2 查找元素 #
matlab
% 查找第一个满足条件的元素
data = [10 25 30 45 50 35];
target = 40;
found = false;
for i = 1:length(data)
if data(i) > target
fprintf('找到第一个大于%d的元素: data(%d) = %d\n', ...
target, i, data(i));
found = true;
break;
end
end
if ~found
fprintf('未找到大于%d的元素\n', target);
end
1.3 while循环中使用 #
matlab
% 无限循环中使用break
while true
answer = input('输入q退出: ', 's');
if lower(answer) == 'q'
break;
end
disp(['你输入了: ' answer]);
end
disp('已退出');
1.4 嵌套循环中的break #
matlab
% break只退出当前层循环
for i = 1:3
for j = 1:3
if i + j == 4
fprintf('break at i=%d, j=%d\n', i, j);
break; % 只退出内层循环
end
fprintf('i=%d, j=%d\n', i, j);
end
end
1.5 退出多层循环 #
matlab
% 使用标志变量退出多层循环
found = false;
for i = 1:5
for j = 1:5
if i * j == 12
fprintf('找到: i=%d, j=%d\n', i, j);
found = true;
break;
end
end
if found
break;
end
end
二、continue语句 #
2.1 基本用法 #
continue语句用于跳过当前迭代,继续下一次迭代:
matlab
% 跳过偶数
for i = 1:10
if mod(i, 2) == 0
continue;
end
disp(i);
end
% 输出: 1 3 5 7 9
2.2 过滤无效数据 #
matlab
% 跳过NaN值
data = [1.2, NaN, 3.4, NaN, 5.6, 7.8];
sum = 0;
count = 0;
for i = 1:length(data)
if isnan(data(i))
continue;
end
sum = sum + data(i);
count = count + 1;
end
fprintf('有效数据平均值: %.2f\n', sum/count);
2.3 条件处理 #
matlab
% 处理不同类型的数据
items = {'apple', 123, 'banana', [], 'cherry', 456};
for i = 1:length(items)
item = items{i};
% 跳过空元素
if isempty(item)
continue;
end
% 跳过数值
if isnumeric(item)
continue;
end
% 只处理字符串
fprintf('水果: %s\n', item);
end
2.4 while循环中使用 #
matlab
i = 0;
while i < 10
i = i + 1;
if mod(i, 3) == 0
continue;
end
disp(i);
end
% 输出: 1 2 4 5 7 8 10
三、return语句 #
3.1 基本用法 #
return语句用于立即退出函数:
matlab
function result = find_negative(data)
for i = 1:length(data)
if data(i) < 0
result = i;
return; % 立即退出函数
end
end
result = -1; % 未找到负数
end
3.2 输入验证 #
matlab
function result = process_data(data)
% 验证输入
if nargin < 1
error('需要输入数据');
end
if isempty(data)
result = [];
return; % 空数据直接返回
end
if ~isnumeric(data)
error('数据必须是数值类型');
end
% 处理数据
result = data * 2;
end
3.3 提前退出 #
matlab
function success = save_data(filename, data)
% 检查文件是否可写
fid = fopen(filename, 'w');
if fid == -1
success = false;
return;
end
% 写入数据
fprintf(fid, '%s\n', data);
fclose(fid);
success = true;
end
四、对比总结 #
4.1 三种控制语句对比 #
| 语句 | 作用 | 适用范围 |
|---|---|---|
| break | 退出当前循环 | for、while循环 |
| continue | 跳过当前迭代 | for、while循环 |
| return | 退出函数 | 函数 |
4.2 使用场景 #
matlab
% break: 找到目标后停止
for i = 1:100
if condition_met
break; % 找到了,不需要继续
end
end
% continue: 过滤不需要的情况
for i = 1:100
if should_skip
continue; % 跳过这个
end
% 处理需要的情况
end
% return: 验证失败或完成时退出
function result = my_function(input)
if invalid_input
result = [];
return; % 直接退出函数
end
% 正常处理
end
五、实用示例 #
5.1 二分查找 #
matlab
function idx = binary_search(arr, target)
left = 1;
right = length(arr);
idx = -1;
while left <= right
mid = floor((left + right) / 2);
if arr(mid) == target
idx = mid;
return; % 找到目标,退出函数
elseif arr(mid) < target
left = mid + 1;
else
right = mid - 1;
end
end
end
5.2 数据处理管道 #
matlab
function result = process_pipeline(data)
% 步骤1:验证
if isempty(data)
result = [];
return;
end
% 步骤2:过滤无效值
clean_data = [];
for i = 1:length(data)
if isnan(data(i)) || isinf(data(i))
continue;
end
clean_data = [clean_data, data(i)];
end
% 步骤3:检查是否有有效数据
if isempty(clean_data)
result = [];
return;
end
% 步骤4:计算
result = mean(clean_data);
end
5.3 交互式菜单 #
matlab
function interactive_menu()
while true
fprintf('\n===== 菜单 =====\n');
fprintf('1. 新建\n');
fprintf('2. 打开\n');
fprintf('3. 保存\n');
fprintf('0. 退出\n');
choice = input('请选择: ');
switch choice
case 1
disp('新建文件');
case 2
disp('打开文件');
case 3
disp('保存文件');
case 0
disp('退出程序');
break;
otherwise
disp('无效选择,请重试');
end
end
end
六、最佳实践 #
6.1 避免深层嵌套 #
matlab
% 不推荐:深层嵌套
for i = 1:n
if condition1
for j = 1:m
if condition2
if condition3
% 处理
end
end
end
end
end
% 推荐:使用continue简化
for i = 1:n
if ~condition1
continue;
end
for j = 1:m
if ~condition2
continue;
end
if ~condition3
continue;
end
% 处理
end
end
6.2 合理使用return #
matlab
% 推荐:提前检查并返回
function result = process(data)
if isempty(data)
result = [];
return;
end
if ~isnumeric(data)
error('数据必须是数值');
end
% 主要逻辑
result = data * 2;
end
% 不推荐:所有逻辑在if中
function result = process(data)
if ~isempty(data) && isnumeric(data)
result = data * 2;
else
result = [];
end
end
七、总结 #
本章学习了:
- break语句:退出当前循环
- continue语句:跳过当前迭代
- return语句:退出函数
- 嵌套循环控制:标志变量
- 最佳实践:避免深层嵌套、合理使用return
下一章将学习MATLAB函数的详细内容。
最后更新:2026-03-27