我有一个关于在使用计时器对象时计算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
答案 0 :(得分: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
此代码还会通过一次调用[{1}}来替换发出各种if
调用的disp
结构。如果您打算打印计数,这是一种更好的方法。
答案 1 :(得分: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;
答案 2 :(得分:0)
如果要计算进入函数的次数,必须使计数器变量持久化,否则在每次调用时都将其设置为零。