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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1334閲覧

干支、誕生石、星座、運勢を出したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/26 01:27

編集2019/06/30 02:53

わからない点↓
誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。
最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法を教えて下さい。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>占い</title> </head> <body> <script> var name;//名前 var by;//生年 var bm;//生月 var bd;//生日 var isi; var star; var message; var eto; var seiza; var Random; var ran;
name=prompt("お名前は?",""); by=prompt("生まれた西暦年を半角4桁で入力してください",""); bm=prompt("生まれた月を半角(1~12)で入力してください",""); bd=prompt("生まれた日を半角(1~31)で入力してください",""); function zodiac(){ var eto=["申","酉","戌","亥","子","牛","寅","卯","辰","巳","午","未"]; return eto[by%12]; } function birthstone(){ switch(bm){ case '1': isi="ガーネット"; break; case '2':isi="アメジスト"; break; case '3':isi="アクアマリン"; break; case '4':isi="ダイヤモンド"; break; case '5':isi="エメラルド"; break; case '6':isi="真珠"; break; case '7':isi="ルビー"; break; case '8':isi="ペリドット"; break; case '9':isi="サファイア"; break; case '10':isi="オパール"; break; case '11':isi="トパーズ"; break; case '12':isi="タンザナイト"; break; } return isi; } function constellation(){ if((bm===3&&bd>=21)||(bm===4&&bd<=19)){seiza="牡羊座";} else if((bm===4&&bd>=20)||(bm===5&&bd<=20)){seiza="牡牛座";} else if((bm===5&&bd>=21)||(bm===6&&bd<=21)){seiza="双子座";} else if((bm===6&&bd>=22)||(bm===7&&bd<=22)){seiza="蟹座";} else if((bm===7&&bd>=23)||(bm===8&&bd<=22)){seiza="獅子座";} else if((bm===8&&bd>=23)||(bm===9&&bd<=22)){seiza="乙女座";} else if((bm===9&&bd>=23)||(bm===10&&bd<=23)){seiza="天秤座";} else if((bm===10&&bd>=24)||(bm===11&&bd<=22)){seiza="蠍座";} else if((bm===11&&bd>=23)||(bm===12&&bd<=21)){seiza="射手座";} else if((bm===12&&bd>=22)||(bm===1&&bd<=20)){seiza="山羊座";} else if((bm===1&&bd>=21)||(bm===2&&bd<=18)){seiza="水瓶座";} else if((bm===2&&bd>=19)||(bm===3&&bd<=20)){seiza="魚座";} return seiza; } function fortune(){ var num = Math.floor(5*Math.random())+1; star=star+"★"; for(var i=0;i<num;i++){star=star+"★";} String[] message= {"今日はおとなしく過ごしましょう","明日はいいことありますよ、きっと","頑張れば、なにかいいことあるかもよ" ,"今日はいいことあるかもね","今日もいいことあるはずです!"}; Random ran=new Random(message.length); int N=ran.nextInt(); return star+message; } console.log(by+"年生まれの"+name+"さんの干支は"+zodiac()+"です。"); console.log(bm+"月生まれの"+name+"さんの誕生石は"+birthstone()+"です。"); console.log(bm+"月"+bd+"日生まれの"+name+"さんの星座は"+seiza+"です。"); console.log(fortune()+message[N]); </script>
</body> </html>

実行結果
HTML1300: ナビゲーションが発生しました。
2019年生まれの浦島ですさんの干支は亥です。
6生まれの浦島ですさんの誕生石はundefinedです。
6月26日生まれの浦島ですさんの星座はundefinedです。
undefined★★undefined
となっている状態です。

実行結果を以下の通りにしたいです。
例、
1963年生まれの浦島さんの干支は卯です。
5月生まれの浦島さんの誕生石はエメラルドです。
5月1日生まれの浦島さんの星座は牡牛座です。
★★★頑張れば、何かいいことあるかもよ
としたいです。

わからない点↓
誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。
最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法を教えて下さい。

運勢表
1 ★ 今日はおとなしく過ごしましょう
2 ★★ 明日はいいことありますよ、きっと
3 ★★★ 頑張れば、なにかいいことあるかもよ
4 ★★★★ 今日はいいことあるかもね
5 ★★★★★ 今日もいいことあるはずです!

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

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

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

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

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

m.ts10806

2019/06/26 01:30

コードはマークダウンのcode機能を利用してご提示ください。 また、現状の問題は何でしょうか?ここまでできているのならもう少し頑張ればできそうに思います。 何が分かりませんか?問題・課題を明確に記載してください。
gentaro

2019/06/26 01:34

「どうすればいいの?」だけだと https://teratail.com/help/avoid-asking これに引っかかるので、どうすればいいのかを自分なりに考えて、うまくいかないところを質問してみましょう。
Lhankor_Mhy

2019/06/29 09:24 編集

質問編集拝読。 とりあえず、yambejpさんのご回答をご覧になってはいかがですか?
退会済みユーザー

退会済みユーザー

2019/06/29 09:35

yambejpさんのコードを入力しても HTML1300: ナビゲーションが発生しました。と出るだけでコンソールログが出ない状態です。
Lhankor_Mhy

2019/06/29 09:41

原因が他にもありますから、それは仕方がないですね…… 初めは、小さいものから作っていくといいかもしれませんよ。
退会済みユーザー

退会済みユーザー

2019/06/29 09:43

何度か試していたらCONSOLE21301: コンテキストがセキュリティで保護されていないか、E19C4010_task10.html でのホスト制約のため、serviceWorker.getRegistrations が拒否されました。と出たのですが「コンテキストがセキュリティで保護されていないかホスト制約のため、serviceWorker.getRegistrations が拒否されました。」で調べても出てこなかったのですが解決法はありますか?
Lhankor_Mhy

2019/06/29 09:55

関係ない話なような気がしますね。
guest

回答3

0

ベストアンサー

他の人のコメント欄でやりとりしてもいけないので新しく回答として。

まず、前提としてpromptで入って来るものは文字列になります。
そのためcaseで数値と比較しても比較できませんでしたね。
function constellation()でも同じ事が言えます。
例えば
一番最初のif((bm===3&&bd>=21)
この比較ですが、オペランドの型はbm文字列、3は数値です。
そこで型を揃えるためにどっちを揃えてもいいのですが
文字列として比較する場合はcase文のように値をシングルクォートで囲みます
if((bm==='3'&&bd>='21')
こうすることで文字列の比較となるのでうまく式が評価されるはずです。
逆に数値として比較したい場合は

name=prompt("お名前は?",""); by=prompt("生まれた西暦年を半角4桁で入力してください",""); bm=prompt("生まれた月を半角(1~12)で入力してください",""); bd=prompt("生まれた日を半角(1~31)で入力してください",""); /* 文字列を数値へパースする */ by=parseInt(by); bm=parseInt(bm); bd=parseInt(bd);

上記3行を追加してあげてください。(これがコメントで書いたパースです)
パースする場合はcasefunction constellationもシングルクォートで囲む必要はありません。

ランダムで運勢を出すについては
配列に運勢のメッセージを入れてしまい、その中からランダムで選択する方が簡単かと思われます。

Javascript

1function fortune(){ 2 var fortuneArr = ["★ 今日はおとなしく過ごしましょう", 3 "★★ 明日はいいことありますよ、きっと", 4 "★★★ 頑張れば、なにかいいことあるかもよ", 5 "★★★★ 今日はいいことあるかもね", 6 "★★★★★ 今日もいいことあるはずです!",]; 7 8 // 配列からランダムで値を選択 9var fortune = fortuneArr[Math.floor(Math.random() * fortuneArr.length)]; 10return fortune;

こんな感じでしょうか

投稿2019/06/30 04:07

編集2019/06/30 04:08
mepon

総合スコア480

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

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

退会済みユーザー

退会済みユーザー

2019/06/30 04:31

本当にありがとうございます。<(_ _)>
mepon

2019/06/30 04:37

解決できたようで良かったです。 ただ、試した感じ全角半角が考慮されておらず、 全角数字を入れるとまたundefinedになってしまうので そこだけ注意してください。
guest

0

機能がいくつかにわかれているのでそれぞれ順に確認していけばよいでしょう
たとえばzodiac()はetoの定義がreturnの後ろにあるのでおかしい

javascript

1var name="浦島";//名前 2var by="1963";//生年 3var bm="5";//生月 4var bd="1";//生日 5var eto; 6function zodiac(){ 7 var eto=["申","酉","戌","亥","子","牛","寅","卯","辰","巳","午","未"]; 8 return eto[by%12]; 9} 10console.log(zodiac());

投稿2019/06/26 01:38

yambejp

総合スコア114777

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

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

退会済みユーザー

退会済みユーザー

2019/06/29 11:35

ありがとうございます。ご指摘いただいた点を修正することで入力された人の干支が出るようになりました。
退会済みユーザー

退会済みユーザー

2019/06/29 11:39

「誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。 最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法」の二つが解決していない状態なのですが、コードをどのように打てば表示されるようになりますか?
guest

0

function birthstone(){が閉じられてないです。
etoの定義が関数の中に入っているので、外からアクセスできないです。
fortune() birthstone()を書き忘れています。
isi star message の定義を忘れています。

まず、開発者ツールでエラーメッセージを見ることを覚えましょう。

質問の編集を受けて追記

function birthstone(){を閉じる場所が間違っていると思います。

投稿2019/06/26 01:51

編集2019/06/29 09:57
Lhankor_Mhy

総合スコア36074

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

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

退会済みユーザー

退会済みユーザー

2019/06/29 11:30

ありがとうございます。そこを閉じることによりコンソールログが表示されるようになりました。
退会済みユーザー

退会済みユーザー

2019/06/29 11:39

「誕生石と星座のundefinedと出ているところはどう書けば正しい表示になるか。 最後のコンソールログで星を出し、さらに運勢ごとに言葉を付け加える、その方法」の二つが解決していない状態なのですが、コードをどのように打てば表示されるようになりますか?
Lhankor_Mhy

2019/06/29 11:51

それはよかった。あと少しですね。 誕生石と星座はそれぞれ変数isi、seizaに入っています。
Lhankor_Mhy

2019/06/29 11:52

おっと、違った。 誕生石の方は、birthstone() を読んでいないのが原因です。
mepon

2019/06/29 12:17

解決しそうなので横から失礼します。 console.log(bm+"生まれの"+name+"さんの誕生石は"+isi+"です。"); ここでbirthstone()を呼んであげましょう。 ちなみにデバッグしてみたところ当方の環境だと case文の数字はシングルクォートで囲わないとうまく比較できませんでした。(参考までにどうぞ) constellation()も呼んであげてはいますがreturnで返してないので返してあげましょう。 constellation()内のif分も厳密比較してますがパースしてあげないとうまく比較できませんでした。 横から失礼しました。
退会済みユーザー

退会済みユーザー

2019/06/30 01:57

シングルクォートとパースですか...使ったことがなかったので調べて使ってみます。
退会済みユーザー

退会済みユーザー

2019/06/30 02:59

すいません... 一時間ほどパースについて調べたりランダムで運勢を出すのを調べていたんですけど、パースの使い方、文章の出し方がわからないです...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問