循环控制 #

一、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

七、总结 #

本章学习了:

  1. break语句:退出当前循环
  2. continue语句:跳过当前迭代
  3. return语句:退出函数
  4. 嵌套循环控制:标志变量
  5. 最佳实践:避免深层嵌套、合理使用return

下一章将学习MATLAB函数的详细内容。

最后更新:2026-03-27