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

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

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

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

3回答

579閲覧

Javascript 無限ループに入る

koko122102

総合スコア39

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

1グッド

0クリップ

投稿2022/02/17 17:51

質問失礼いたします。表題の通りjsでシステムを作っていた際に無限ループに入ってしまい、その原因と対処法がわからずにいます。原因と対処方法をご教授お願い申し上げます。

作りたいもの:
10, 11, 12 のように、1 の差で連続しているカードを 1 つのグループにする。例えば、5, 10, 11, 12, 24, 25 というカードがあったら「5」というグループと「10, 11, 12」というグループと「24, 25」というグループに分かれる。
・各グループのスコアは、グループ内の最大の数であり、総合スコアは各グループのスコアの和である。例えば上記の例では、「5」というグループのスコアは 5 で、「10, 11, 12」というグループのスコアは 12 で、「24, 25」というグループのスコアは 25 なので、総合スコアは 5+12+25 = 42 である。
上記のようなものを作成しております。

javascript

1let lines1 = ["6", "5 10 11 12 24 25"] 2 let arry1 = lines[1].split(" "); 3 let num1 = parseInt(arry1[0]); 4 for(let i = 1; i <= arry1.length; i++){ 5 arry1[i] = parseInt(arry1[i]); 6 if(arry1[i+1] == false){ 7 num1 += arry1[i]; 8 break; 9 }else if(arry1[i] - arry1[i-1] !== 1 && arry1[i] - arry1[i+1] !== 1){ 10 num1 = arry1[i]; 11 } 12 13 console.log(num1); 14 }
Zuishin👍を押しています

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

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

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

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

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

guest

回答3

0

JavaScript

1var a = [5, 10, 11, 12, 24, 25]; 2a[a.length] = parseInt(a[a.length]); 3console.log(a); // [5, 10, 11, 12, 24, 25, NaN] 4a[a.length] = parseInt(a[a.length]); 5console.log(a); // [5, 10, 11, 12, 24, 25, NaN, NaN]

i===arry1.lengthのときにa[i]に代入することで配列の長さが増えていると思います。

JavaScript

1var a = [5, 10, 11, 12, 24, 25]; 2console.log(a[a.length]===false); //false 3console.log(a[a.length]===undefined); //true

投稿2022/02/17 21:22

編集2022/02/19 06:41
querykuma

総合スコア777

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

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

takasima20

2022/02/17 21:29

おーなるほど。そこで増えてたんスね~
koko122102

2022/02/18 12:21

ありがとうございます!!となると、それを防ぐために下記のコードを記載しているのですが、これでは何かおかしいということなのでしょうか。 if(arry1[i+1] == false){ num1 += arry1[i]; break; }
querykuma

2022/02/19 06:39

配列の範囲外を参照したときの値はfalseではなくundefinedです。
guest

0

javascript

1const a = ["6", "5 10 11 12 24 25"]; 2const b = a[1].split(" ").map(Number); 3const c = b.reduce((x,y)=>(x.splice(x.slice(-1)[0]==y-1?-1:x.length),[...x,y]),[]).reduce((x,y)=>x+y); 4console.log(c);

投稿2022/02/18 00:55

yambejp

総合スコア114572

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

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

0

エラーになるかと思ったら無限ループになるんですねえ

javascript

1 for(let i = 0; i < arry1.length; i++){

いまのコードだと無条件に配列の範囲外を参照するのでなんとかしましょう。

投稿2022/02/17 20:34

takasima20

総合スコア7458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問