2017-09-26 16 views
0
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; 
} 

シンプルなコードです。 if入れ子のelseを削除してforループを使用したいと思います。 これをforループに変換するにはどうすればよいですか?for-elseをforループに変換する

+1

'if' -'else'は1つの操作です - ' for'ループは何回ループするのですか? – doctorlove

+0

私はあなたがそれをループで置き換える方法を本当に見ていません。とにかくインデックスを 'a'にループすることができます。でも、とにかく範囲のために何らかの種類の条件が必要になります。読みやすく、理解しやすいでしょうか?おそらくそうではありません。 –

+0

'if'を' switch'に変更するのは私が見たものですが、 '0'から' max_range/10'になるループを作ることができるようです。 if(range> i * 10 && range <= i * 10 + 10){a [i] = value;}のように、ループの値( 'i')をインデックスとして使用できます。 } '。 – GolezTrol

答えて

8

ループは必要ありません。あなたは1つの動作をしています。

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

うん。 '(range-1)/ 10'になります。 30は2に、20は1につながる。それが可能ならば、範囲= 0だけが間違ってしまう。必要に応じて 'max'を追加することでカバーすることもできます。 – GolezTrol

+0

@AndyG on balance、どちらもできません。私は: – Caleth

+0

Methinksそこに0のフロアも必要です。 – Bathsheba

0

私の他の答えは境界がランタイム修正バージョンが

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 
0

I would like it to remove the nested else if's and use a for loopおそらく間違った表現のようなものになるだろう10の倍数であることに非常に特定である:あなたの例にはnested if-elseはありません。

  • ループ、IF-elseと彼らはすべての条件を扱うしかし、異なる作業を切り替える:

ループが反復を行います。いくつかの状態を確認するとn回、反対にスイッチを1回チェックします。したがって、if-elseをループに変換することはできません。

  • それは本当にコードを効果的かつ可能な限り小さいようにしようとして良いプログラミングだが、それは必ずしもそうではありません。もしそうなら、なぜそのような専門家が何百万ものコードラインを持つ巨大なプログラムを構築するのです。

  • コードは正常に動作します。

関連する問題