質問: ### 前提・実現したいこと オノマトペを連続して出し、音ごとに区切りたいのですが、実行した際に「underfined」が文字と記号の間に入ってきてしまいました。 「underfined」を非表示にする方法を教えていただけませんか? ### 発生している問題・エラーメッセージ ``` ゴロundefined:ポタundefined:ゴロゴロゴロundefined:コンundefined:コンコンundefined: ``` ### 該当のソースコード ``` ここに言語を入力 ``` ### 試したこと 「undefined」が出る理由を調べ、「return」を試してみたのですがうまくいきませんでした。代入はどこになにを入れればいいのかがわからず、試せていません。
回答: まず、**コードを読みましょう**。 コードを読むコツは『**一行レベルで、行がなにをしているか考えながら読む**』です。 例えば、コメントにするとかです。 ``` // 配列を用意 var array = new Array(6); array[0] = "ポツ"; array[1] = "ザーッ"; array[2] = "ボタ"; array[3] = "ポタ"; array[4] = "ゴロ"; array[5] = "コン"; // rnzk関数を定義 function rnzk() { // 配列rnzkを用意 var rnzk = (array[Math.floor(Math.random() * array.length)]); // 変数kに1〜5の乱数を設定 var k = Math.floor(Math.random() * 5) + 1; // kから5まで繰り返す for (var i = k; i <= 5; i++) { // rnzkの値を出力 document.write(rnzk); } } // 5回繰り返す for (var i = 0; i < 5; i++) { // rnzk関数を呼び出して戻り値を表示 document.write(rnzk() + ":"); } ``` ですね。(質問文がアレなのであえて) コメントにしてあるやつをシミュレーションしてみてください。 そうすると、rnzk**配列**の方は初期化も代入もされていません。 元のコードでは(関数内の)二番目のfor文では 『上記を5回繰り返す』と書かれています。 なんか、勘違いしていそうな匂いです。 さらに、私が素直に読んだコードでは 『kから5まで繰り返す』となっています。 これは合っていますかね? 数直線を書いて考えるとわかりますよ。 そもそもkとはなんでしょうか。 素直に読むと『1〜5の乱数』のはずです。 ということは、k=1もあり得るし、 k=5の場合もあり得る。 例えば乱数が5、つまりk=5の場合、 数直線で考えると、 『一回だけしか処理しない』です。 おそらく、本来の意図とは違うはずです。 つまり『基礎ができていないことが原因』です。 プログラミングは『書いて終わり』ではありません。 私の過去回答を参考にして下さい。 **やる気があるのなら必ず読みましょう。**