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

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

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

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

Q&A

解決済

3回答

1397閲覧

javascriptの問題

ShinKoba

総合スコア8

JavaScript

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

0グッド

0クリップ

投稿2020/10/20 10:13

console.log('----------------3. 数を数える----------------');
/**

  • 配列numbersの中に数字の3が何個あるか画面に表示するプログラム
  • を書いてください。
  • ※繰り返し文とif文を使用します。

*/
let numbers = [1, 3, 4, 5, 8, 9, 3, 3];

どのような方法で解いたらいいのか分からず困っています、、、。
アドバイスいただければ幸いです。

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

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

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

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

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

m.ts10806

2020/10/20 10:14

ポンポン課題を丸投げてばかりではそのうちアドバイスつかなくなるのではと。(そもそも非推奨です)
maisumakun

2020/10/20 10:15

> どのような方法で解いたらいいのか分からず困っています、、、。 「※繰り返し文とif文を使用します。」と明記してあります。
Zuishin

2020/10/20 10:15

繰り返し文と if 文をまず学べばいいと思います。
miyabi_takatsuk

2020/10/20 10:57

まず、問題文がどんな答えを求めているか、そこを理解していますか? 次に、配列がどういったものかの理解、 次に、繰り返しと、if文は何をどうすることなのか? の理解をしましょう。 (そこまでいったら自ずと答えは出るはず。そこまでいけば算数の理解でも解けるはず)
m.ts10806

2020/10/20 11:01

問題を読まずに赤の他人に丸投げるのは問題ですね。
ShinKoba

2020/10/21 02:38

ご指摘ありがとうございます。 自分で考えず問題を丸投げにしてしまいました。 改めて、繰り返し分とif分を復習して問題を解いてみます。
guest

回答3

0

ベストアンサー

これはけっこううまい引っかけ問題ですね。問題文をよく読んでください。

配列numbersの中に数の3が何個あるか画面に表示するプログラム

そう、「数値」ではなく「数字」です。たとえば、[3, 33, 3.3, 300]に数値の「3」は1個ですが、数の「3」は6個です。数値と数字は似ているようでプログラミングの扱いとしては全く違います。そう、これは、数字と数値をちゃんと区別しているのかを見るための問題です。簡単だと思ってはいけませんよ。

さて、数字をみることになるので、配列の各要素は文字列にする必要があります。ただ、数値の文字列表現は一通りではありません。3000という数値は"3000"とも"3e+3"とも表現できますし、JavaScriptにおける0.3は"0.3"とも"0.29999999999999998889776975374843"とも表現できます。いや、数値以外が入っている可能性もあります。ただ、解釈によって答えが変わるのは問題文としておかしいですので、ここはオーソドックスに標準的な手法で(たいていの場合はtoString()メソッドでの変換)で文字列にすると考えてしまうのが良いでしょう。

ここまで来たら簡単です。まずはArray.prototype.join()を使って、文字列化とまとめるのをしてしまいましょう。そして、1ユニコード文字ずつ見に行くにはfor ofが便利です。文字列の添字アクセスはサロゲートペアを考慮できないという問題があるため、ユニコード文字のイテレーターとして扱わないと面倒な処理が必要になってきます。あとは、条件文を使ってカウントするだけです。

JavaScript

1let numbers = [1, 3, 4, 5, 8, 9, 3, 3]; 2let count = 0; 3for (const c of numbers.join('')) if (c === '3') count++; 4console.log(count);

これで完成です。


今回はかなり難易度が高い問題だと思います。しかし、数字と数値の違いはプログラミングにおいて重要な概念の一つです。そこを気づかせてくれるというところでは、ある意味良問かも知れません。最後に、アドバイスとしてしましては、「問題文をよく読む」ことでしょうか。実際のプログラミングにおいても、仕様書や設計書を注意深く読んで、それに沿った実装をする必要があります。表現の少しの違いが、大きな違いです。そこを気にせずに、思い込みのみで走ってしまうと、後から大問題になって炎上の原因になったりもします。その訓練を初心者の頃からするというのはある意味いい方法なのかも知れませんね。

投稿2020/10/20 13:21

raccy

総合スコア21735

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

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

ShinKoba

2020/10/21 02:38

ご回答ありがとうございます。 アドバイス参考にさせていただきます。
BeatStar

2020/10/21 04:28

あ、そっちの意味だったのか…orz
e-watt

2020/10/21 04:33

そして出題者が「そんなつもりじゃなかった。数値だよ察しろ」とか言い出す落ちが待っているかも
guest

0

このままだと丸投げですよ。
丸投げは時間の無駄です。
それをやるぐらいならとっとやめた方がいいです。

基礎はできていますか。基礎が出来ていないと話になりませんから。


まず、『現実世界でならどうするか』を考えるといいですよ。

今回の場合は

プレゼントボックスのような、中身の見えない箱が数個あり、横一列に並んでいる。 この箱の列にはそれぞれ1箱につき一つ、(出店の)射的の商品のように数字が書かれている紙がセットになったものが入っている。 この中から『3』が書かれた紙が入っている箱は何箱か調べよ。

みたいなものです。(別にビリヤードのボールみたいなものでもいいけど。)

私なら何も考えずに1箱ずつ開けて調べる。"3" と書かれている紙が入っていれば正の字を書きながら調べていく。

これを最後の箱まで調べてその集計結果を提示すればいい。

これをコードにするだけです。

何が難しいのでしょうか。

投稿2020/10/20 10:30

編集2020/10/20 10:37
BeatStar

総合スコア4958

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

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

ShinKoba

2020/10/21 02:42

ご回答ありがとうございます。 BeatStarさんのご指摘の通り、問題を丸投げにしていました。 改めて自分で考え直して取り組もうと思います。
guest

0

配列の基本はforで回すことです

javascript

1let numbers = [1, 3, 4, 5, 8, 9, 3, 3]; 2var count=0; 3for(var i=0;i<numbers.length;i++){ 4 if(numbers[i]==3) count++; 5} 6console.log(count);

投稿2020/10/20 10:44

yambejp

総合スコア114839

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

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

yambejp

2020/10/20 10:44

配列にはforEachメソッドがあります let numbers = [1, 3, 4, 5, 8, 9, 3, 3]; var count=0; numbers.forEach(x=>{ if(x==3) count++; }); console.log(count);
yambejp

2020/10/20 10:46

ここまで理解した上で、ちゃんとやるならfilterでしょうね let numbers = [1, 3, 4, 5, 8, 9, 3, 3]; var count=numbers.filter(x=>x==3).length; console.log(count);
yambejp

2020/10/20 10:49

応用 let numbers = [1, 3, 4, 5, 8, 9, 3, 3]; var count=numbers.reduce((x,y)=>(x+=(y==3),x),0); console.log(count);
ShinKoba

2020/10/21 02:40

ご回答ありがとうございます。 filterや応用のやり方も参考にして問題を解いてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問