while循环不保存结果

While loop not saving results

我正在尝试随机出现一段时间 "y"。但是,while 循环不显示 "result" 或在出现提示时不显示任何内容。我只得到最初生成的与我的结果相同的随机数。我想在我的结果向量中添加第二列,以显示循环条件下每个 X 值的计算结果,由于某种原因,第二列未被保存。我刚得到一个列向量 "X"。

y = round(rand*10);

x = randi([-5,5],1,y);
X = x';
result=[X];

while isempty(result)==1
    disp('Nothing')

    if result > 2
        disp('A')
        result=[result,result+5];
    else
        disp('B')
        result=[result,result*0];
    end
end

您的代码无法正常工作的原因是您的 while 状况。具体来说,看看你的 while 语句中的逻辑:

while isempty(result)==1

如果result为空,while循环将只执行。情况并非如此,因为代码开头的 result = X 。因此,您的 while 循环永远不会执行。


鉴于您在下面的评论中的解释,您希望生成一个随机数,并且每次执行此操作时,您都想检查结果是否大于 2。如果是,则将 5 添加到该元素并将其作为元素添加到新列。如果不是,只需将其替换为 0。

我建议您使用 for 循环而不是 while 循环,因为您可能希望矩阵在某个点后停止增长。

因此,改为执行以下操作:

y = round(rand*10);
result = [];
x = randi([-5,5],1,y);

for idx = 1 : y
    if x(idx) > 2
        result = [result [x(idx); x(idx)+5]];
    else
        result = [result [x(idx); 0]];
    end
end

您首先要做的是确定一个随机数,该随机数定义了您要生成的随机数的数量限制。然后我们声明一个空数组来存储我们的结果。之后,我们生成随机数,然后我们使用 for 循环遍历 x 的每个元素并检查它们的值是什么。如果该值为 > 2,那么我们将此数字添加到我们的二维矩阵中,在该矩阵中,它的值将被添加 5 到一个新列中。如果不是,我们只需将此值设置为 0。

当我用这个做 运行 时,这就是我得到的 result:

result =

     5     2    -5     4     5
    10     0     0     9    10

但是,您可以轻松地 执行此操作而无需 for 循环并将其完全矢量化。您可以简单地将上面的代码替换为:

y = round(rand*10);
x = randi([-5,5],1,y);

%// NEW
result = [x; zeros(1,y)];
ind = x > 2;
result(2,ind) = result(1,ind) + 5;

上面的代码所做的是我们已经将result初始化为二维数组,其中第一行由随机生成的数字组成,第二行有一堆零。我们搜索任何随机生成的值为 > 2 的值,然后使用这些位置更新第二行,我们在其中取满足此条件的那些值并将每个值加 5。然后我们将结果存储在第二行。如果您 运行 上面的代码,您应该能够产生相同的结果。