循环问题,因为 'continue' statement inside 'if' statement in matlab

loop problem because of 'continue' statement inside 'if' statement in matlab

我有以下代码,执行时会无限运行。如果我删除 CONTINUE 语句就可以了。但是,使用 CONTINUE 语句会出现问题。代码是

Bn_x=zeros (length(pu_arrival), 1); Bn_x(1)=6;
Br_x=zeros (length(pu_arrival), 1); Br_x(1)=2;
jn1= zeros (length(pu_arrival), 1); jn1(1)=3;
in=zeros (length(pu_arrival), 1);
jn2= zeros (length(pu_arrival), 1); jn2(1)=3;
jr1=zeros (length(pu_arrival), 1);  jr1(1)=1;
ir=zeros (length(pu_arrival), 1); 
jr2=zeros (length(pu_arrival), 1);  jr2(1)=1;
numb_chan_idle_N=0;
numb_chan_idle_R=0;

for i=2:24 %length(pu_arrival)
    if rem(i,2)==0
        [Bn_x,Br_x]=failure3(numb_chan_idle_N,numb_chan_idle_R,in,jn1,jn2,ir,jr1,jr2,Bn_x,Br_x,i);
            continue
    end

end

%%%%%%%%调用函数%%%%%%%%%%%%

function [Bn_x,Br_x] =failure3(numb_chan_idle_N,numb_chan_idle_R,in,jn1,jn2,ir,jr1,jr2,Bn_x,Br_x,i)
temp=0;
while temp<1
x=randi([1 6]);
if x==1
    if in(i-1)>0
        temp=temp+1;
    end
elseif x==2
    y=randi([1 2]);
    if y==1 
        if jn1(i-1)>0
            temp=temp+1;
        end
    elseif y==2 
        if jn2(i-1)>0
            temp=temp+1; 
        end
    end
elseif x==3  
    if ir(i-1)>0
    end

elseif x==4
    y=randi([1 2]);
    if y==1 
        if jr1(i-1)>0
            temp=temp+1; 
        end

    elseif y==2 
        if jr2(i-1)>0
            temp=temp+1; 
            jr2(i)=jr2(i-1)-1;
            Br_x(i)=Br_x(i-1)-1;
    else
        fprintf('JR2 destined to fail but it is already=%d\n', jr2(i-1))
        continue
        end
    end

elseif x==5
    if numb_chan_idle_N>0
        temp=temp+1; 
    end
elseif x==6
    if numb_chan_idle_R>0
        temp=temp+1; 
    end
end
end
end

我希望控制器在 IF 条件满足并执行其内部语句后返回到 FOR 循环。但是,控制器永远不会出来。我不知道代码有什么问题。

您正在 fault3 内生成无限循环,continue 语句按预期工作,代码永远不会到达它。

在您给出的代码中,只有某些输入依赖条件会导致 temp=temp+1,退出的必要条件 failure3。某些数字组合(例如您提供的示例)永远不会触发 failure3 内的任何 if 条件,因此永远不会退出。

您可以通过在代码中添加以下内容轻松地看到这一点:

function [Bn_x,Br_x] =failure3(numb_chan_idle_N,numb_chan_idle_R,in,jn1,jn2,ir,jr1,jr2,Bn_x,Br_x,i)
temp=0;
iteration = 0
while temp<1

    iteration=iteration +1

    ...

failure3背后的逻辑被打破了。在任何情况下,每当你有一个无限循环 while temp<1 时,尝试添加一个额外的语句,例如 while temp<1 && iteration<500 这样你就可以更好地调试代码。