将if-else转换为for循环

问题描述:

int max_range = 100; 
// I do not want to add more else if.. Actually max range is still 100 with more else ifs. 
// Range can take values from 0 to 100 

if (range <= 10){ 
    a[0]= value; 
} 

else if (range > 10 && range <= 20){ 
    a[1]= value; 
} 

else if (range> 20 && range <= 30){ 
    a[2]= value; 
} 

else if (range > 30 && range <= 40){ 
    a[3]= value; 
} 

else if (range> 40 && <= max_range){ 
    a[4]= value; 
} 

它是简单的代码。我希望它删除嵌套的else if并使用for循环。 如何将其转换为for循环?将if-else转换为for循环

+1

'if' -'else'是一个操作 - 什么是你的'for'循环将循环? – doctorlove

+0

我真的不知道如何用循环替换它。我猜,你可以将索引循环到“a”,但是无论如何你仍然需要某种范围的条件。它会更易读易懂吗?可能不会。 –

+0

把'if'改成'switch'是我见过的,但是看起来你可以做一个从'0'到'max_range/10'的循环。循环值(比如'i')可以用作索引,比如'if(range> i * 10 && range GolezTrol

你不需要循环,你正在做一个动作。

a[std::max(0, std::min(4, (range - 1)/10))] = value; 
+1

是的。这将是'(范围-1)/ 10'。 30会导致2,20会导致1.只有范围= 0会出错,如果这是可能的话。可以有选择地通过添加'max'来覆盖。 – GolezTrol

+0

@AndyG余下的,我也不能:p – Caleth

+0

你需要的地板也是0。 – Bathsheba

我其他的答案是非常特别的界限是10.倍数运行时修改的版本会是这样的

std::set<int> boundaries = { 10, 20, 30, 40, max_range }; 

// ... potentially modify `a` and `boundaries`, keeping the number of elements equal 

a[std::distance(boundaries.begin(), boundaries.lower_bound(range))] = value 

I would like it to remove the nested else if's and use a for loop可能不正确表达:有在你的例子没有nested if-else

  • 循环,if-else和开关工作方式不同但它们都处理条件:

循环反复做;检查一些条件n次,而如果切换它们检查一次。所以你不能将if-else转换成循环。

  • 这的确是一个很好的编程努力使代码有效和尽可能小,但并非总是如此。如果这样的话,为什么这些专家会用数百万的代码来构建一个庞大的程序

  • 您的代码正常工作。