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。然后我们将结果存储在第二行。如果您 运行 上面的代码,您应该能够产生相同的结果。
我正在尝试随机出现一段时间 "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。然后我们将结果存储在第二行。如果您 运行 上面的代码,您应该能够产生相同的结果。