MATLAB中for循环中的条件语句

3
这是我尝试的一个简单示例(似乎毫无意义),但这个想法比这段简单代码更大。
在for循环期间,如果发生某些事情,我想跳过这个步骤,并在末尾添加一个额外的步骤。
  1. 我正在尝试创建一个数字列表,不包括数字8。
  2. 如果代码创建了数字8,则exitflag等于1。
  3. 我可以修改这个程序,以便如果exitflag=1,则移除该结果并添加另一个循环。
代码:
for i = 1:1000
    j = 1+round(rand*10)
    if j == 8
        exitflag = 1
    else
        exitflag = 0 
    end
    storeexit(i)=exitflag;
    storej(i)=j;
end
sum(storeexit)

我希望能得到一个不包含数字8的1000个数字的列表。


@Jean-ClaudeArbaut 这里不是关于数字的问题,我只是举了一个简单的例子... - user30609
1
我认为你想做的是重复循环的相同步骤,直到结果不是8。是这样吗? - Cris Luengo
1
@CrisLuengo 当然。 - user30609
2个回答

4

如果你想做1000次循环,但是如果不喜欢某个结果就要重复该循环迭代,而不是在结尾标记重复,那么你可以在for循环内部进行循环,直到满意为止:

stores = zeros(1000,1); % Note that it is important to preallocate arrays, even in toy examples :)
for i = 1:1000
    success = false; % MATLAB has no do..while loop, this is slightly more awkward....
    while ~success
       j = 1+round(rand*10);
       success = j ~= 8;
    end
    storej(i) = j; % j guaranteed to not be 8
end

1
@LiorCohen 这是我最尊重的意思。 - Tony Chivers
1
谢谢,这让我思考了一下,但并不完全是我要找的。它没有解决我要找的问题,因为在实际例子中,还有其他东西必须运行,才能知道 j = 8,我不能假设 j 可能是 8。 - user30609
1
@user30609:您能详细说明一下吗?也许编辑一下您的问题以澄清这一点?这里的初始化(j=8)只是为了让while循环运行一次。在while循环内部,您运行您的代码,而while循环会重复执行,直到您对代码的结果感到满意。通常我会写成do <something> while <condition>,但MATLAB不知道那种语法。因此,我需要将j初始化为失败状态,以便while循环至少运行一次。我重新编写了代码,以使这一点更加明显。 - Cris Luengo
1
好的,我想我有一个解决方案,但在继续之前我需要让j等于一个数字。 - user30609
1
@user30609:也许重写的代码更容易适应您的特定情况?原则上是相同的逻辑。 - Cris Luengo

-1

不行。

使用for循环时,循环次数在循环开始时就已经确定了,是不可变的。

如果要实现你想要的功能,需要使用while循环。


2
当然这是一个不太好的答案。如果您提供一个演示您方法有效的示例,不是仅仅回答“不”,而是解释为什么“不”,那么这对于OP和整个社区来说难道不会更有帮助吗? - Tony Chivers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接