二次元配列にmarkを5個入れようと思ったら、下記のコードではループが抜けられなかったのです。console.logで出力すると、全部markで埋まった配列が出力されるんですが、なんでそうなるのかが、よく分かりません。どこに問題があるのでしょうか?
javascript
1let mark = "O"; 2let length = 3; 3function makeArray(){ 4 let i = 0; 5 let x; 6 let y; 7 let markArray = (new Array(length)).fill((new Array(length)).fill("")); 8 while(i < 5){ 9 x = Math.floor(Math.random()*length); 10 y = Math.floor(Math.random()*length); 11 if(!markArray[x][y]){ 12 markArray[x][y] = mark; 13 i++; 14 } 15 console.log(markArray); 16 } 17 return markArray; 18} 19let markArray = makeArray(); 20console.log(markArray);
変数markはどこで定義されて何が入っているのでしょうか。このまま実行すると未定義エラーが出ます。
書き忘れました。'O'が入っています
ゴールの形がよく見えてないですが、抜けられないのはiがカウントアップされていないに他なりません。i,x,yをwhileの中で出力してもらえれば分かるかと。そもそも何をしているか分かっていますか? >let markArray = (new Array(length)).fill((new Array(length)).fill(mark));
訂正します。markArray = (new Array(length)).fill((new Array(length)).fill(""));
既に書いていますが、ゴールを明記してください。「二次元配列にmarkを5個入れようと思った」だけでは最終形が見えません。無限ループが抜けさえすれば良いのか、それともやりたい形があるのか。やりたい形があるならそれは何なのか。無限ループを抜けたいだけならiのカウントアップが行われていないだけなのでそこを見れば良いですし。
ループを抜けてmarkが5個入った二次元配列を返すことです。
文字での説明ではなく例えば配列をコンソールで出力した結果のような形とかそういう意味です。「5個はいった二次元配列」だけではほぼ無限に答えがあります。
解決されたんですね。良かったです。今後は「確実に伝わる表現」を心掛けてください。文章で伝えるには限界があることも多いです。
回答4件
あなたの回答
tips
プレビュー