質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

解決済

3回答

11380閲覧

指定範囲が広いif文をswicth文に変換

ReiHiguchi

総合スコア73

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

0クリップ

投稿2016/01/10 14:05

この質問はそれができるのかできないのかが知りたいだけなので方法がないなら「無い」と言っていただいて構いません。
指定範囲の広いif文をswitch文に変換する方法はあるのでしょうか?
例えば、

Java

1if(i => 0 && i < 10){ 2 //処理1 3}else if(i => 10 && i < 20){ 4 //処理2 5}else if(i => 20 && i < 30){ 6 //処理3 7}else{ 8 //処理4 9}

通常なら問題ないのですが、例えば一番上の条件の時だけ処理1と処理2を両方行いたいときなどはif文で書くと処理2を2回書くことになるはずです。

Java

1if(i => 0 && i < 10){ 2 //処理1 3 //処理2 4}else if(i =< 10 && i < 20){ 5 //処理2 6 //↑を2回書くことになる 7}

switch文ならそういう点では利点が発生すると思うのですが、私の考えるswicth文は

Java

1switch(i){ 2case 0: 3case 1: 4//ここでは飛ばします 5case 10: 6 //処理1 7case 11: 8//省略 9case 20: 10 //処理2 11 break; 12}

みたいなもので処理2を2回書くほうがコードがすっきりすると思いswitch文はこういう場面では使えないと思ったのですが、もっとスマートにswitch文を書くことができるなら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ちなみにif文を使う場合、

java

1if(i >= 0 && i < 20){ 2 if(i < 10){ 3 //処理1 4 } 5 //処理2 6}

とすれば、処理1の記述を1回で済ませられます。

投稿2016/01/10 14:41

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全体の流れを変えずにとにかくその部分だけ応急的に整理したい場合であれば、
私なら、とりあえず条件判断を別メソッドにして enum 値等で条件を返してその値で switch するようにします。
シンボル名を適切にすれば、とりあえず、式とにらめっこして何を判断しているか悩む必要が無い状態にはできるでしょう。

ただ、一般的にこのような場合、処理手順そのものを一度見直したほうがいい場合が多いと思います。
こういうジレンマに陥るときは、様々な要件を一度に処理しようとしすぎている場合が多いです。
要件を整理して、どの要件をどの工程(階層)で処理するか(別の階層では考慮しなくてよくするか)を考えていくと、Java のような最近の言語では、処理の記述をそこまで複雑にしなくても書けてしまう場合が多いです。
言っておいてなんですが、条件判断メソッドを使う私の案もたいていの場合あまりいい方法ではないです、たぶん、 enum 値の名前を決めているうちに、処理を分割するアイディアが湧いて、最終的には分割してしまうことが多いと思います。

投稿2016/01/10 14:41

kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

int temp = i/10;//tempはintですから、0=<i<10ならtempは0、10=<i<20ならtempは1、20=<i<30ならtempは2
switch(temp){
case 0:
case 1:
case 2:
}

投稿2016/01/10 14:25

GikgeStephano

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ReiHiguchi

2016/01/10 14:38

おおお、指定する数の感覚が等しい時はこれが使えますね! 自分では思いつきませんでした!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問