• 締切済み

条件分岐の記述方法

BlurFiltanの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

考えようによっては 方法は色々とあると思います。 方法案をいくついか回答します。 (最後の方に行くほど変な方法だと思いますが。。。) ◎ 方法案1-1 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //配列 kazu_arr の要素数分ループ for (var i:int = 0; i < kazu_arr.length; i++) { //もし kazu が kazu_arr[i] の値と等しいとき if (kazu == kazu_arr[i]) { trace("処理"); //この for 文を抜ける break; } } //============================================= ◎ 方法案1-2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //配列 kazu_arr 内の要素の値を走査 for each (var num:int in kazu_arr) { //もし kazu が kazu_arr のいずれかの要素の値と等しいとき if (kazu == num) { trace("処理"); //この for each..in 文を抜ける break; } } //============================================= ◎ 方法案1-3 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr に OR条件該当値 を設定 var kazu_arr:Array = [2,7,13,26,35,36,37,38,39,40]; //kazu_arr の要素を「@」で連結した文字列を //文字列化した kazu でセパレートして配列にしたとき //その要素数が 2 以上であれば if (kazu_arr.join("@").split(String(kazu)).length >= 2) { trace("処理"); } //============================================= ◎ 方法案2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //文字列 kazu_str に OR条件該当値 を設定 var kazu_str:String = "2,7,13,26,35,36,37,38,39,40"; //文字列化した kazu が 文字列 kazu_str 内にあれば if (kazu_str.indexOf(String(kazu),0) != -1) { trace("処理"); } //============================================= ◎ 方法案3 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //オブジェクト kazu_obj の OR条件該当値キー に 1 の値を設定 var kazu_obj:Object = {2:1,7:1,13:1,26:1,35:1,36:1,37:1,38:1,39:1,40:1}; // kazu_obj の kazu キー が 1(true) であれば if (kazu_obj[kazu]) { trace("処理"); } //============================================= ◎ 方法案4-1 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr の OR条件該当値 の要素に 1 を設定 var kazu_arr:Array = [0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1]; //もし kazu_arr[kazu] が 1(true) であれば if (kazu_arr[kazu]) { trace("処理"); } //============================================= ◎ 方法案4-2 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //配列 kazu_arr の OR条件該当値 の要素に true を設定 var kazu_arr = new Array(); kazu_arr[2] = kazu_arr[7] = kazu_arr[13] = kazu_arr[26] = kazu_arr[35] = kazu_arr[36] = kazu_arr[37] = kazu_arr[38] = kazu_arr[39] = kazu_arr[40] = true; //もし kazu_arr[kazu] が true であれば if (kazu_arr[kazu]) { trace("処理"); } //============================================= ◎ 方法案5 //============================================= //kazu に 13 が代入されているものとする(仮) var kazu:int = 13; //変数「"k"+OR条件該当値」を Boolean 宣言 var k2:Boolean,k7:Boolean,k13:Boolean,k26:Boolean,k35:Boolean,k36:Boolean,k37:Boolean,k38:Boolean,k39:Boolean,k40:Boolean; //もし変数「"k"+kazu」 が未定義でなければ if (this["k" + kazu] != undefined) { trace("処理"); } //============================================= ちなみに..., ご質問されているような内容は [技術者向] コンピューター> プログラミング > Flash カテゴリに質問される方が良いように思いますよ。

pory_bekk
質問者

お礼

丁寧にいろんなパターンを考えていただき ありがとうございます。 やはり、基本的には配列を用意する方法になりますよね・・・。 最初から念頭にはあったのですが、例えば ----------------------------------- if(kazu == 2,7,13,26,35){ 処理 } ----------------------------------- のような書き方で、"構文的に"簡単にまとめる事が できるのかな?(そういう書き方があるのかな?)と思った次第です。 今回は構文というよりは、考え方自体を変える必要があったようですね。 ご提示いただいたソースを元に色々試してみます。 ありがとうございました。 また、カテゴリーの指摘もありがとうございました。 次回からはそちらで質問させていただきます。

関連するQ&A

  • switchでの条件分岐の書き方を教えて下さい。

    こんにちは。 いつもお世話になっております。 またわからない事が出てきてしまったので、どうか ご指導よろしくお願いいたします。 簡単な検索機能をつくりたくて、思考錯誤 しております。 フォームからPOSTで受け取る変数の数は 10個あります。 それぞれの変数が ””でなければ、受け取った 変数を元に、SQL文がかわってゆく。 という事がしたいのです。 10個もあるので、たとえば 変数が$_POST["a"]から$_POST["j"]まであった時に if文を使うとすると if($_POST["a"] != "" && $_POST["b"] == "" && $_POST["c"] != "" (略)){ $stt = "検索したい予定のSQL文1"; }elseif($_POST["a"] == "" && $_POST["b"] != "" && $_POST["c"] != "" (略)){ $stt = "SQL文2"; ・ ・ ・ と言う風に、ものすごいにはなると思うのですがifを つなげていけば良いのかな、と思うのです。 PHPの基礎HPなどを検索してみると、SWITCHを 使えば、多岐に分岐するIF文を、見やすくできる、 と書いてあったので、使ってみたいのですが、書き方の 説明によると switch(変数){ case 値1:  条件を満たす時の処理1 break; case 値2:  条件を満たす時の処理2 default: } と紹介してあったのですが、今回わたしがしたい場合の 条件分岐だと、変数は一つではなく、ある変数は空でこの変数は値が何か入っていて、またもう一つの変数は 空で・・・の時は、このSQL文、というように させたい場合には、switchでどうかけばよいのか わからないのです。 それとも、こういう条件分岐の場合は、switchを 使うべきではないのでしょうか・・・? どうかご指導よろしくお願いいたします。  

    • ベストアンサー
    • PHP
  • 条件分岐

    JavaScriptで、「if文を使用して0~9のランダムな数字を取得して出た数字と偶数か奇数かの2つの情報を表示する」 「0~2のランダムな数値を3つ取得して、それぞれの数値と最も数値が大きい変数の情報を表示する(最も数値が大きい変数が複数ある時は複数表示)」 プログラムはそれぞれどのようになりますか?

  • 二つの条件が不等価の場合の記述

    どうも連続でくだらない質問で申し訳ありません(^^; 変数aが不等価、もしくは変数bが不等価の場合の記述はどのようにすればいいのでしょうか。 $aが"あ"ではない場合、もしくは$bが"い"ではない場合に次の処理を実行する、という書き方をしたいのですが if($a!="あ" || $b!="い"){ } ではうまくいきませんでした。 ご教授、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 条件分岐について

    Javaの条件分岐のことで質問させていただきます。 入力された値によって、適切なHTMLタグを表示するプログラムを作っています。 「画像の表示」「画像の幅」「画像の高さ」と項目をわけてそれぞれにJTextFieldを設置し、画像の名前や高さなどを入力。画像の高さと幅についてはJCheckBoxを1つ設置し高さと幅を指定する場合はチェックし、指定しない場合はチェックを外す。という方法を考えています。 現在はif文で「画像の表示」に画像ファイル名(拡張子まで)を入力、「画像の高さ」「画像の幅」に高さと幅を数字で入力、 チェックボックスにチェックを入れ、ボタンを押したらJTextAreaに「<img src="画像ファイル名" Width="幅" Height="高さ">」と表示することはできています。 しかし画像の名前のみ入力して、高さと幅を指定しない(チェックボックスのチェックを外す)など、別の処理を行うif文を上記のif文の後に書いても実行することができません。 switch文で処理を分岐させることも考えていますが、式を上手くかけず悩んでいます。 if文などで上手く処理を分岐させるにはどうすればいいでしょうか?

  • NULLを含むフィールド値の条件分岐

    どなたかご存知の方はご教示願います。 使用言語はVB6_SP5、DBはMdb(アクセス97形式)です。 ADOでDBに接続し、レコードセットを取得しそのレコードの任意のフィールドの値により処理を3通りに分けたいのです。(値はNULL、"1"、"9" の3つです。) IF文で条件分岐を行いたいのですが、うまく振り分けができずにおります。 IF ISNULL(RS.FIELDS("HHH").VALUE) THEN NULLの場合の処理 ELSE "1"の場合の処理 END IF ' "9" の場合はなにもしない 結果は全てNULLの場合の処理を実行してしまいます。 どこを修正すれば宜しいのでしょうか?

  • 簡素で美しく記述するには・・・・

    今与えられた開始日から与えられた終了日までの期間を求めるプログラムを作りました。勿論その中で閏年の計算も行います。 自分の作ったプログラムでは1つだけ気に入らないところがありました。それは閏年の計算部分です。 ■うるう年の判定 ・年が4で割り切れる時はうるう年  従って、2004年はうるう年である ・ただし、100で割り切れる時はうるう年でない  従って、1900年はうるう年ではない ・ただし、400で割り切れる時はうるう年である。  従って、2000年はうるう年である この条件を行うため自分は次のように記述しました for(year = First_Year; year <= End_Year; year++){   if(((year  % 4) == 0) && ((((year % 100) != 0) && ((year % 400) != 0)) || (((year % 100) == 0) && ((year % 400) == 0)))){     閏年の個数を数える    } } for文変数の初期でFirst_Yearを与えていますが、First_Yearが開始年でEnd_Yearが終了年です。 if文がむかつくほど長くなってしまいました。やっていることはyearが4で割り切れかつ100と400で割ったときに両方共に余りが出る、またはyearが4で割り切れかつ100と400で割ったときに両方共に余りが出ない場合に 閏年の個数を数える ようにしています。 かなり強引な質問ではありますが、みなさんならどのように組むでしょうか? 別に自分の考える”美しい”プログラムでなくてもかまいません。色々な考えを聞かせてもらえないでしょうか?

  • rubyの構文(&&を用いた条件分岐について)

    ruby初心者です。 最近、ruby on railsで書かれたソースを引き継ぎ解析を行っています。 その中で、以下のような構文が出てきました。 ========================================= num = 0 bool = false vals = '' puts 'start' num == 0 && bool && if vals  puts 'true' else  puts 'false' end puts 'end' ========================================= 上記プログラムを実行すると、if ~ end までが実行されませんでした。 そこで、変数boolをtrueに変更して再実行したところ、if文が実行されました。 そこで私は、上記プログラムは以下と同値であると解釈しました。 ====================================== (省略) if num == 0 && bool  if vals   puts 'true'  else   puts 'false'  end end ======================================= 以上を踏まえて・・・ 1.私の解釈は正しいでしょうか? 2.間違っている場合、正しい処理の解釈を教えていただけますでしょうか?または参考URLを教えていただけますと助かります。 文の最後に"&&"がついている文を見たことがなく、ネットで調べても 正解らしいものが掲載されていなかったので質問させていただきました。 拙い説明で申し訳ありませんが、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • プログラミングで二番目に大きい数を表示する

    指定された個数(100個以下)だけ整数を読み込んで,読み込んだ整数の一覧,それらのうちの最大値と二番目に大きい値とを表示するプログラムを作成。最大となる値が複数入力された場合も正しく処理する。 このプログラムで入力した数字が全部同じ時、二番目に大きい値はありません。と表示したいのですが、どのようにしたらいいのかわかりません。教えてください。あとこのプログラムで最大値と二番目に大きい値出せたのですが、念のため問題ないか確認お願いします。 #include <stdio.h> #define NUMBER 100 /*整数の個数の上限*/ int main(void) { int i; int num; int kazu[NUMBER]; int max; int sec; printf("整数は何個ですか:"); scanf("%d", &num); puts("整数を入力してください。"); for(i = 0; i<num; i++){ printf("%3d個目:",i+1); scanf("%d", &kazu[i]); } printf("入力された整数は%d個で、\n",num); for(i=0;i<num;i++) printf("%d ",kazu[i]); printf("です。\n"); sec = max = kazu[0]; for(i=1; i<num; i++){ if(kazu[i]>max) max=kazu[i]; } for(i=0;i<num;i++){ if(kazu[i]>max){ sec=max; max=kazu[i]; }else if((max>kazu[i]) && (kazu[i]>sec)) sec=kazu[i]; } printf("最大値は%dです。 \n",max); printf("二番目に大きい値は%dです。\n", sec); return(0); }

  • if文などで使用される条件式で、同じような条件をまとめる方法

    $keyという変数には、aiueo、kakikukeko、sasisuseso、tatitutetoなどの文字列が入ると仮定して、if文でaiueo、sasisusesoの文字列の時のみ、実行させないようにしたい場合、通常は if ($key != "aiueo" && $key != "sasisuseso") {   処理 } としなければなりません。しかし、これだともっと条件が多くなった場合、非常に見づらくなってしまいます。 「$keyと言う変数が、○○、××、■■、・・・以外の値の時」という条件を各場合、もっと簡潔にまとめて書く方法って無いでしょうか? 例えば、if ($key != ("aiueo" && "sasisuseso"))みたいな感じで。 (switchを使う手もありますが、これは他の変数($a == 0など)に関する条件を組み合わせたい場合、面倒になるので) もし、方法などありましたら、教えていただければと思います。

    • ベストアンサー
    • PHP
  • PHPのIF文で条件の記述の仕方について

    PHPのIFを用いて、データベースから取り出した特定のレコードが 変数に入っている値と一致する場合とそうでない場合で処理を分けたいと考えています。 変数に入っている値と一致する場合は 指定したURLへリダイレクトされるようにしたいです。 以下のようにIF分を書いても条件に引っかからず 次の処理に進んでしまいます。 ※testレコードに入っている値はredirectです。 ------------ $db = mysql_query('SELECT * FROM redirect_records WHERE user_id='.$userid, $connect); $db = mysql_fetch_array($db); $Comparison1=$db['test']; $Comparison2='redirect'; if ($Comparison1 == $Comparison2){ $url = '/redirect/test'; $form_state['redirect'] = $url; } ------------ 記述の仕方が間違っているのでしょうか。 PHPに関してはまだまだ初心者で原因がわかりません。 具体的には上記のIF分はIF分の中に入れ子になっています。 ボタンをクリックした時にtestレコードに入っている値がredirectなら/redirect/testへ それ以外は次の処理へと進んでほしいです。 ------------ function form_submit($form, &$form_state) { global $user,$order,$item; if ($_SESSION['checkout_valid'] === FALSE) { $url = '/checkout'; } elseif ($_SESSION['checkout_valid'] !== FALSE) { $db = mysql_query('SELECT * FROM redirect_records WHERE user_id='.$userid, $connect); $db = mysql_fetch_array($db); $Comparison1=$db['test']; $Comparison2='redirect'; if ($Comparison1 == $Comparison2){ $url = '/redirect/test'; $form_state['redirect'] = $url; } } ------------ このようにelseifの中の処理でさらにtestレコードにredirectが入っている場合は <URL>/redirect/testに飛ぶようにしたいです。 「環境」 PHP 5.2.17 MySQL 5.1.59 どうかお助けください。 よろしくお願いします。

    • ベストアンサー
    • PHP