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

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

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

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

Q&A

3回答

941閲覧

Class内のメソッドが実行されない

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2020/11/08 05:49

JavaScriptのクラスの学習を行っております。

生徒の平均点と平均点に対するジャッジを行うプログラムを作成したのですが、
平均点を求めるメソッドcal_avg(data){}が実行されない状態です。
原因が分かる方、アドバイスをお願い致します。

javascript

1class Student{ 2 constructor(name){ 3 this.name = name; 4 } 5 6 cal_avg(data){ 7 let sum = 0; 8 for (let i=0; i <= data.length; i++){ 9 sum = sum + data[i]; 10 } 11 12 let avg = sum / data.length; 13 return avg; 14 } 15 16 jude(avg){ 17 let result; 18 if (60 <= avg){ 19 result = "OK"; 20 }else{ 21 result = "NG"; 22 } 23 return result; 24 } 25 } 26 27 let aaa = new Student("sato"); 28 let data = [10, 20, 30, 40]; 29 let avg = aaa.cal_avg(data); 30 let result = aaa.jude(avg); 31 32 console.log(data.length); //実行結果 4 33 console.log(aaa.name); //実行結果 sato 34 console.log(avg); //実行結果 NaN 35 console.log(result); //実行結果 NG

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

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

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

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

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

miyabi_takatsuk

2020/11/08 11:58

既に回答はでていますが、実行はされていますよ。 実行されてなければ、 NaNという値さえも出力されません。
guest

回答3

0

js

1 cal_avg(data){ 2 let sum = 0; 3 for (let i=0; i <= data.length; i++){ // "<=" ? 4 sum = sum + data[i]; 5 }

投稿2020/11/08 05:56

ozwk

総合スコア13521

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

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

miyabi_takatsuk

2020/11/08 11:56

あぁ、最後にundefined加算しちゃってるわけですね。。。
guest

0

Class内のメソッドが実行されない

実行されているかどうか、確かめると良いです。

js

1 console.log("cal_avg 実行") 2 let sum = 0; 3 for (let i=0; i <= data.length; i++){ 4 console.log(data[i]); 5 sum = sum + data[i]; 6 } 7 console.log(sum ) 8/** 9cal_avg 実行 1010 1120 1230 1340 14undefined 15NaN 16**/

上記の通り実行自体はされてます。

配列は0番目から始まるので「配列の個数」をあらわすlengthを使って <= をループ上限に決めれば
4つ要素があった場合は0も含めて5周しますね。
渡した配列に5番目の要素はありません。

0始まりの配列を利用して、そのlenghで回す場合、<= を使うことってないと思います。

投稿2020/11/08 06:10

編集2020/11/08 06:14
m.ts10806

総合スコア80850

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

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

0

javascript

1class Student{ 2 constructor(name){ 3 this.name=name; 4 } 5 set name(name){ 6 this._name=name; 7 } 8 get name(){ 9 return this._name; 10 } 11 cal_avg=data=>data.reduce((x,y)=>x+y)/data.length; 12 jude=avg=>avg>=60?"OK":"NG"; 13} 14 15let aaa = new Student("sato"); 16let data = [10, 20, 30, 40]; 17let avg = aaa.cal_avg(data); 18let result = aaa.jude(avg);

投稿2020/11/08 07:09

yambejp

総合スコア114827

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問