• 締切済み

列車走行位置で、フラグによる分岐から変えたいです。

列車走行位置で、フラグによる分岐から、enum分岐のint文にしたいです。 以下のプログラムを参考にして作っています。 http://r113.web.fc2.com/p/viewer/jrw-hokuriku-20150314/index.html 以下はjsの文章ですが、 //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月〜金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; else if(year == 2013 && month == 11 && date == 4) weekdayFlag = false; else if(year == 2013 && month == 12 && date == 23) weekdayFlag = false; else if(year == 2014 && month == 1 && date == 1) weekdayFlag = false; return weekdayFlag; } 僕が具体的に行ったのは、フラグを3つ以上に分けることでした。 しかし、フラグを分けても、ことは解決しかなったです。 フラグというのはBoolean型の一種で、 真偽値を返すものであって、 AorBにしかならないのです。 以下はjavaにおけるbooleanの説明ですが、 javascriptでも同じことがいえると思います。 https://www.sejuku.net/blog/41241 そこで、抜本的な解決策として、enum型のint文があるのを知りました。 https://qiita.com/BMJr/items/5ec834e6513fe5f0ad87 上記のenum型のint文にして、先ほどのjavascriptの文章を書き直すことって可能でしょうか。 僕には天才ではないため、 断片的な情報から、一つの情報をあびきだすのはできないです。 どうか、ご教授願えたら幸いです。

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5066/13238)
回答No.3

> 変数を3つ以上持たせたいという意味です。 どの変数に値を3種類以上持たせたいのでしょうか。 例えば weekdayFlag に3種類値を持たせたいのであれば、 weekdayFlag = 1; weekdayFlag = 2; weekdayFlag = 3; の様に数値を入れて、if での判定で weekdayFlag == 2 のような比較をすればいいだけではありませんか? もし数値だと判りにくいと言うことであれば例示されたURLにあるようなオブジェクト定義を使う方法も可能です。 const hoge = { blue: 1, red: 2, green: 3; }; weekdayFlag = hoge.blue; とすれば、weekdayFlag の中には 1 と言う値が入ります。 先に書いたモノを置き換えるとしたら weekdayFlag = hoge.blue; weekdayFlag = hoge.red; weekdayFlag = hoge.green; となります。 if で weekdayFlag == hoge.blue と比較すれば判定も可能です。 ただし、これは他の言語で言うenumと若干違い、擬似的なenumと言う事になります。

  • _kappe_
  • ベストアンサー率68% (1520/2214)
回答No.2

> enum分岐のint文 Javascriptにはenumは存在しませんが、似たようなものを自分で定義して使うすることはできます(後述)。 一方「int文」というものは存在しません。リンク先のQiitaの記事(言語はSwift)にもint文なんてものは出てきません。": Int"と書かれている部分は文ではなくて型の指定です。 平日ダイヤと土休日ダイヤの2種類の処理をしたいならばbooleanの値を持つweekdayFlagだけで足りそうに思えます。もし平日、土曜日、休日ダイヤの3種類に分けたいのであればenumもどきを定義して使うのは有効でしょう。 (定義の例) var DiagramKind = { Weekday : 0, Saturday : 1, Holiday : 2 } ダイヤを3種類に分けるというのはこちらで考えた例なので、何をどのように場合分けしたいのか、その場合分けの条件は何なのか、補足で説明してください。 >僕が具体的に行ったのは、フラグを3つ以上に分けることでした。 平日か否かのフラグ(weekdayFlag)以外にどんなフラグを作ってどのようにうまく行かなかったのでしょうか。その情報もあったほうが、質問者さんがやりたいことが回答者に伝わりやすくなると思います。 質問タイトルには「フラグによる分岐から変えたい」と書かれていますが、質問文の中にはフラグによる分岐はどこにもないので、質問者さんがenumを使って何をしたいのかが読み取れないのです。

sembokulove
質問者

補足

フラグだと、1個フラグを作って終わりです。 理由はonかoffのどちらかしかないからです。 実際、土日以外の切り替えの構文を書こうとすると知識がないせいか、切り替えができなかったり、真っ白になったりしました。 一方、enum型やそれに付随するint文に注目する理由は、 選択肢が3つ以上あるときにも使えるということです。 例えば、1月1日にはAダイヤ、1月2日にはBダイヤ、1月3日にはCダイヤに切り替わるようなプログラムにしたいのです。 jrの特急列車だと、土日ダイヤのほかに特定の日付だけ運転する多客期とかってのがありますから、それを実現したいのです。 もし、1時間以内に答えがない場合、この設問を閉じて、新しく質問しなおします。😡。

  • t_ohta
  • ベストアンサー率38% (5066/13238)
回答No.1

まず、JavaScriptにはenum型はありませんので、単純にenum型に変えるという事はできません。 例示されている関数は平日ダイヤか土休日ダイヤかの判定をするモノだと思われるので、関数の戻り値は2種類しかないと思いますが、3種類に分けるというのはどのような戻り値を想定されているのでしょうか。 関数を設計する際は、まず処理の目的を決め、入力値と戻り値をしっかり定義することからはじめないといけません。 質問者さんが理想とする入力値が何で、どのような処理をして、どのような結果を返したいのか明確にしましょう。 その説明が無いと他の人には何をしたいのかが判らずアドバイスが出来ません。

sembokulove
質問者

補足

つまり、 変数を3つ以上持たせたいという意味です。 フラグがあるのにenumがないのはなぜ。 以下のような式にはできないのでしょうか。 https://www.sejuku.net/blog/71453

関連するQ&A

  • 列車位置情報のフラグ分岐をやめたいです。

    列車走行位置で、フラグによる分岐から、enum分岐のint文にしたいです。 以下のプログラムを参考にして作っています。 http://r113.web.fc2.com/p/viewer/jrw-hokuriku-20150314/index.html 以下はjsの文章ですが、 //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月〜金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; else if(year == 2013 && month == 11 && date == 4) weekdayFlag = false; else if(year == 2013 && month == 12 && date == 23) weekdayFlag = false; else if(year == 2014 && month == 1 && date == 1) weekdayFlag = false; return weekdayFlag; } 僕が具体的に行ったのは、フラグを3つ以上に分けることでした。 しかし、フラグを分けても、ことは解決しかなったです。 フラグというのはBoolean型の一種で、 真偽値を返すものであって、 AorBにしかならないのです。 以下はjavaにおけるbooleanの説明ですが、 javascriptでも同じことがいえると思います。 https://www.sejuku.net/blog/41241 そこで、抜本的な解決策として、enum型のint文があるのを知りました。 https://qiita.com/BMJr/items/5ec834e6513fe5f0ad87 上記のenum型のint文にして、先ほどのjavasc 僕には天才ではないため、 断片的な情報から、一つの情報をあびきだすのはできないです。 どうか、ご教授願えたら幸いです。 フラグだと、1個フラグを作って終わりです。 理由はonかoffのどちらかしかないからです。 実際、土日以外の切り替えの構文を書こうとすると知識がないせいか、切り替えボタンの切り替えができなかったり、真っ白になったりしました。 一方、enum型やそれに付随するint文に注目する理由は、 選択肢が3つ以上あるときにも使えるということです。 例えば、1月1日にはAダイヤ、1月2日にはBダイヤ、1月3日にはCダイヤに切り替わるようなプログラムにしたいのです。 jrの特急列車だと、土日ダイヤのほかに特定の日付だけ運転する多客期とかってのがありますから、それを実現したいのです。 全文書いてもらわないと困ります。 これが答えられないと、日本のプログラマーは世界に立ち遅れてもしょうがないと思います。😡

  • javascriptのフラグは分岐可能ですか。

    //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月〜金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; 以下はフラグの使い方の一例です。 フラグの書き方は、恐らくvar 任意名Flag = True;という形になると思います。 これをさらに分岐するとき、どういう風な書き方をするのでしょうか。 それとも、別なプログラムが必要ですか。

  • 列車の走行位置プログラムを作りたいです。

    2022/12/28 13:23 自分は、列車の現在時刻をもとにアニメーションを描画するプログラミングを考案したいなぁと考えております。 以下のサイトを参照しています。 http://r113.web.fc2.com/p/viewer/nankai ... index.html 以下のサイトだと、平日ダイヤと土・休日ダイヤの割り振りしかできません。 フラグをいじってみてわかったことですが、これは、曜日単位で分けるものであり、 日付単位で分けることができません。 <code> //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月?金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; return weekdayFlag; } </code> 自分は初歩的なプログラミングしかできませんが、 <code> //月?金なら立てる if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; </code> の部分が、いわば、曜日で分かれるように設定してあることに気が付きました。 これを個別の日にち単位で分けるとしたら、どんなプログラムが考えられるでしょうか。 自分は3つ以上のダイヤパターンを考えたいです。

  • jsでフラグ型をenum型に変えたい。

    以下のjavascript文があります。 [code] //平日ダイヤか土・休日ダイヤかを判定する function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) //フラグ var weekdayFlag = true; //月?金なら立てる if(day >= 1 && day <= 5) weekdayFlag = day >= 1 && day <= 5;   else if(day==6) weekdayFlag2 = day == 6 else weekdayFlag = false; //祝日ならたおす if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; else if(year == 2015 && month == 3 && date == 21) weekdayFlag = false; return weekdayFlag; } [/code] をフラグ型から、enum型に変更できませんか。 フラグではAもしくはBといった2通りの回答しかございませんので、 3つめの分岐は作ることはシステム上無理なのです。 enum型なら、パターンはある程度余裕(無限じゃないかも)をもたせることできるからです。

  • フラグから区分値に置換するにはどうすればいいですか

    フラグから区分値に置換するにはどうすればいいですか。 以下はその例文です。 フラグでは、基本的に立てたり、倒したりするもので、 yesかnoの2通りしか分岐をさせることができません。 つまり、else ifが使えないということです。 一方区分値は複数の分岐をさせることができます。 なので、これにはelse ifが使えます。 それはいかに記述があります。 https://www.gixo.jp/blog/382/ そこで、以下の部分を区分値に置換するにはどのようにすればいいですか。 フラグから区分値に置換した事例を紹介してくれているサイトは皆無です。 以下は、そのコードです。 function dayJudge(year, month, date, day) { //alert(year +" "+ month +" "+ date +" "+ day) var weekdayFlag = true; if(day >= 1 && day <= 5) weekdayFlag = true; else weekdayFlag = false; if(year == 2013 && month == 1 && date == 1) weekdayFlag = false; else if(year == 2013 && month == 10 && date == 14) weekdayFlag = false; return weekdayFlag; }

  • if関数で、aまたはbまたはcという選択できますか

    if関数で、aまたはbまたはcという選択できますか。 ver num=1; if(x=1||x=3||x=5){ console.log("true"); } else{ console.log("folse"); }。 といった書き方はできませんか。 //ダイヤタイプの定義 const diagram = { WeekDay: 1, //平日ダイヤ Holiday: 2, //休日ダイヤ A: 3, //Aダイヤ B: 4, //Bダイヤ C: 5, //Cダイヤ } //ダイヤを判定する function dayJudge(year, month, date, day) { //フラグ(初期値:平日ダイヤ) var diagramFlag = diagram.WeekDay; //土日判定 if(day == 0 || day == 6) { diagramFlag = diagram.Holiday; } //特別な日 if((month == 10 && date == 12)||(month == 11 && date == 3)||(month == 11 && date == 24)) { diagramFlag = diagram.A; } else if(month == 5 && date == 25) { diagramFlag = diagram.B; } else if(month == 5 && date == 30) { diagramFlag = diagram.C; } return diagramFlag; } ができなくて困っています。

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語を学習していてつまづいたので、皆さんの意見を聞きたいと思います。 現在、カレンダーを表示するプログラムをつくっています。 Yearとmonthをユーザが入力すると、その年その月のカレンダーが出るという算段です。(画像貼っておきます。ソースコードは下) これはできました。 これをいじって、Yearをユーザから受け取ると、その年の1月から12月までのカレンダーがば~っと表示されるようにしろ、と言われました。 Yearとmonthを受け取って書くやつは友人の助けを得ながらなんとかかけましたが、もう無理です。多分、for文を使うんだと思うんですが……助けてください! #include <stdio.h> int dayofweek(int year, int month); int daysinmonth(int year, int month); int daysinyear(int year); void showcal(int dow, int days); int main(void) { int year, month; int dow; int dim; printf ("Year?: "); scanf ("%d", &year); printf ("Month?: "); scanf ("%d", &month); dow = dayofweek(year, month); dim = daysinmonth(year, month); showcal(dow, dim); return 0; } void showcal (int dow, int days) { int i, j, d; printf ("Su Mo Tu We Th Fr Sa\n"); d = 1; for (i = 0; i < dow; i++) { printf (" "); } for (; i < 7; i++) { printf (" %d ", d); d++; } printf("\n"); for (j = 0; d <= days; j++) { for (i = 0; i < 7 && d <= days; i++) { if (d < 10) printf (" %d ", d); else printf ("%d ", d); d++; } printf("\n"); } } int daysinmonth( int year, int month) { int dim; dim = 31; if (month == 4 || month == 6 || month == 9 || month == 11) dim = 30; if (month == 2) { if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) dim = 29; else dim = 28; } return dim; } int daysinyear( int year) { int diy; if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) diy = 366; else diy = 365; return diy; } int dayofweek (int year, int month) { int dow; int days; int y, m; if (year >= 2000) { days = 0; for ( y = 2000; y < year; y++ ) { days = days + daysinyear(y); } for ( m = 1; m < month; m++ ) { days = days + daysinmonth(year, m); } dow = (6 + days) % 7; } else { days = 0; for ( m = month; m <= 12; m++ ) { days = days + daysinmo

  • 特定の日付に対して、画面の表示がなされるように

    特定の日付に対して、画面の表示がなされるようにしたいです。 例えば、10月12日、11月3日、11月24日に実際になったときにだけ、画面に表示されるようにして、それ以外の日は、 画面上に表示されないというのは可能ですか。 以下を参考にしています。 http://r113.web.fc2.com/p/viewer/jrw-hokuriku-20150314/index.html 以下のjavascriptの文章を試しましたが、全然うまくいきませんでした。 僕は天才じゃないため、断片的な情報から組み合わせて、 一つのものを作り上げる能力はありません。 ですので、断片的な情報ではなく、 全部書いてくださるとありがたいです。 //ダイヤタイプの定義 const diagram = { WeekDay: 1, //平日ダイヤ Holiday: 2, //休日ダイヤ A: 3, //Aダイヤ B: 4, //Bダイヤ C: 5, //Cダイヤ } //ダイヤを判定する function dayJudge(year, month, date, day) { //フラグ(初期値:平日ダイヤ) var diagramFlag = diagram.WeekDay; //土日判定 if(day == 0 || day == 6) { diagramFlag = diagram.Holiday; } //特別な日 if((month == 10 && date == 12)||(month == 11 && date == 3)||(month == 11 && date == 24)) { diagramFlag = diagram.A; } else if(month == 5 && date == 25) { diagramFlag = diagram.B; } else if(month == 5 && date == 30) { diagramFlag = diagram.C; } return diagramFlag; }

  • C言語 実行エラー 10000日先が表示されない 

    今10000日先後の年、月、日を求めていて下のプログラムを 考えたんですけど、コンパイルは通るんですが結果がうまくいきません↓ どこがおかしいですか? #include<stdio.h> int leapYear(int); int Date(int,int,int,int); int main(void){ int year,i=0,month,date,date2=10000,emp=0; printf("年>>"); scanf("%d",&year); printf("月>>"); scanf("%d",&month); printf("日>>"); scanf("%d",&date); Date(year,month,date,date2);//date2から各月の日数を引いていく printf("year=%d month=%d date=%d date2=%d \n",year,month,date,date2); return 0; } int leapYear(int year){ //うるう年を求める if(year%400==0){ return 1; } else if(year%4==0 && year%100!=0){ return 1; } else return 0; } int Date(int y,int m,int d,int d2){ for(;;y++){ if(d2<0) return y,m,d,d2; for(;m<=12 || d2>=0;m++){ if(leapYear(y)==1){ if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(29-d); else d2-(31-d); } else if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(28-d); else d2-(31-d); } } }

専門家に質問してみよう