我想编写一个搜索函数,可以递归搜索一个或多个元素的数组:如果多个元素是“活动的”,它应该迭代它们;如果只有一个,只返回那个元素。 到目前为止我所拥有的是:
#include <stdio.h>
#define NUM 10
int GetNext(int curr);
typedef struct test_s {
int actv;
} test_t;
static test_t now[NUM] = {0};
int main(void)
{
int curr = 0;
now[1].actv = 1;
//now[2].actv = 1;
//now[5].actv = 1;
//now[9].actv = 1;
while (1)
{
curr = GetNext(curr);
printf("curr %d\n",curr);
sleep(1);
}
return 0;
}
int GetNext(int curr)
{
++curr; //increment index
if (curr==NUM){
curr = 0; //rollover
}
if (now[curr].actv ==1)
return curr;
else{
for (;curr<NUM;curr++)
if (now[curr].actv == 1)
return curr;
}
return -1;
}
现在,如果数组中有一个或多个活动元素,我不希望它返回-1 ...但是如果没有活动元素只返回-1,否则它应该从0开始(在达到NUM之后) 1)。我最好怎么做呢?
答案 0 :(得分:2)
你需要在循环内部重置为0,然后进行循环测试,看看你是否回到了你的起点。
public class DataClient {
public static void main(String[] args) {
System.out.println(CalculationCache.getScore());
}
}
class CalculationCache{
static{
computeScore();
}
private static int score;
public static int getScore() {
computeScore();
return score;
}
private static boolean flag=false;
static void computeScore(){
if(!flag) {
//calculate the score
for (int i = 0; i < 1000; i++) {
score = score + i;
flag = true;
}
}
}
}
答案 1 :(得分:0)
做这样的事情:
df[!apply(df, 1, function(x) sum(grepl('cat', x))),]