1

在使用计时器对象时,我有一个关于在 for 循环中计算条件为真的次数的问题。所以我设置我的计时器对象每 60 秒调用一次这个函数,如果 X 和 Z 等于 1,它将检查我在数据库中的条件,然后它会做一些事情。问题是我希望它每次 X 和 Z 都等于 1 时计数,因为我有另一个程序每秒更改 X 和 Z 的值。如果计数等于 1、2 和 3,它会做不同的事情。当我运行它时,即使 X 和 Z 多次等于 1,它也不会超过 1。下面是我的代码

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60);
start(a);


function [x] = func(y)
count = 0;
if x == y && z == y
count = count +1;
if count == 1
    disp('1')
elseif count == 2
    disp('2')
elseif count == 3
    disp('3')  
end
else
disp('same')
end
4

3 回答 3

2

您的主要问题是count变量具有函数局部范围,因此每次调用函数时都会创建它,并在函数结束时销毁它。您需要它在调用函数之间保持不变。一种可能性是使count变量成为全局变量:

global count;
count = 0;

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60);
start(a);

function func(y)
global count;
if x == y && z == y
    count = count + 1;
    disp(num2str(count));
else
    disp('same');
end

此代码还用一次调用替换了if进行各种disp调用的结构disp。如果您打算打印出计数,这是一种更好的方法。

于 2013-03-05T18:11:58.393 回答
1

您没有结束第一个 if 语句。因此,如果 count == 1 以及随后的所有内容仅在 x== y && z == y 时执行

关闭您的第一个 if 语句,您的代码应该可以工作:

if x == y && z == y
  count = count +1;
end
if count == 1
...

另请注意,当您编写代码时,每次进入函数时都会将 count 重置为 0,这意味着 count=count+1; 将永远是 count = 0 + 1 = 1;

于 2013-03-05T05:41:40.953 回答
0

如果要计算进入函数的次数,必须使计数器变量保持不变,否则每次调用都会将其设置为零。

于 2013-03-05T17:14:39.237 回答