0

我有一个整数参数,它应该控制在特定运行中事件发生的次数。

例如,如果每次运行的迭代次数为 1000,那么FREQ如果我想让事件每 200 次迭代发生一次,则参数将为 5。但是,我希望能够更改迭代次数,但保持比率不变,并且FREQ如果我根本不希望事件发生,也能够将参数设置为 0。

这是我目前正在使用的:

int N_ITER = 1000;
int FREQ = 5;

void doRun(){
    int count = 0;
    for (int i = 0; i < N_ITER; ++i){
        if (FREQ > 0){
            if (count < N_ITER/FREQ){
                doSomething();
                count++;
            }
            else{
                doSomethingElse();
                count = 0;
            }
        }
        else{
            doSomething();
        }            
    }
}

这很好用,但它不适合我有嵌套的条件,特别是当我有两个很多时doSomething(),我觉得它应该能够比这更容易完成。

我尝试将一个设置为有条件的if (FREQ > 0 && count < N_ITER/FREQ),但显然Floating point exception因为除以零而抛出了一个。

我也尝试使用 try/catch 块,但就混乱而言,使用嵌套条件确实没有什么不同。这个问题有更优雅的解决方案吗?

4

1 回答 1

1

重新安排条件怎么样?而不是count < N_ITER/FREQ,使用count*FREQ < N_ITER. 如果FREQ = 0,则表达式仍然为真。

int N_ITER = 1000;
int FREQ = 5;

void doRun() {
    int count = 0;
    for (int i = 0; i < N_ITER; ++i) {
        if (count*FREQ < N_ITER) {
            doSomething();
            count++;
        } else {
            doSomethingElse();
            count = 0;
        }
    }
}
于 2018-11-03T09:17:07.043 回答