🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

ループ

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

766閲覧

javascript replaceが上手く置き換わらないのかforループがおかしいのか

shidada

総合スコア4

JavaScript

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

ループ

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/11 13:39

前提・実現したいこと

javascriptで数独を作ろうと思っております。
以下のコードで実行してみるとエラーはでないのですが、

試しに一番上の行を
0,1,2,3,4,5,6,7,8
と選択してみると

0のところが9になって、出力されてほしいのですが、上手くいきません。

0のところが、123456789なってそのまま出力されます。

123456789はkouhoという変数でおいているので、replaceがおかしいのか、もしくはどこかで上書きされて123456789に戻ってしまっているのかもしれません。

コードを書いていただかなくても構いません。
「ここのせいで、上手くいかないんだよ!」など、些細なアドバイスでも構いませんので、よろしくお願い致します。

該当のソースコード

html

1 <div id="box"></div> 2 <button type=“button” onclick="buttonClick()">決定</button> 3 <button type=“button” onclick="judge()">計算</button> 4 <div id="ans"></div> 5

javascript

1var values=[] 2function buttonClick(){ 3 for(let i=1 ; i<=9 ; i++){ 4 values[i-1] = []; 5 for(let j=1 ; j<=9 ; j++){ 6 values[i-1][j-1] = document.getElementById("num"+ i + "_" + j).value; 7 } 8 } 9} 10 11 12//表示させる関数 13function output(){ 14 let str=""; 15 for(let i=1 ; i<=9 ; i++){ 16 for(let j=1 ; j<=9 ; j++){ 17 str = str + " " + values[i-1][j-1]; 18 } 19 str = str + "<br>"; 20 } 21 document.getElementById("ans").innerHTML = str; 22} 23 24//i行目で被ったら候補から消す 25function judge_x(i){ 26 let kouho = "123456789"; 27 for(let j=1 ; j<=9 ; j++){ 28 let igyou = values[i-1][j-1]; 29 for(let k=1 ; k<=9 ; k++){ 30 if(igyou ==="k"){ 31 kouho = kouho.replace("k",""); 32 } 33 } 34 } 35 return kouho; 36} 37 38//全ての判断 39function judge(){ 40 for(let i=1 ; i<=9 ; i++){ 41 for(let j=1 ; j<=9 ; j++){ 42 if(values[i-1][j-1]==="0") { 43 // values[i-1][j-1]="×"; 44 values[i-1][j-1] =judge_x(i); 45 } 46 } 47 } 48 output(); 49 } 50 51 52 53//9×9を作る 54function appendBox(i) { 55 let box = document.createElement('div'); 56 box.id = "num" + i; 57 document.getElementById("box").appendChild(box); 58 return box; 59} 60function appendSel(i, box) { 61 let sel = document.createElement('select'); 62 sel.name = box.id + "_" + i; 63 sel.id = box.id + "_" +i; 64 box.appendChild(sel); 65 return sel; 66} 67function appendOpt(i,sel){ 68 let option = document.createElement('option'); 69 option.value = i; 70 option.text = i ; 71 sel.appendChild(option); 72} 73for(let i =1 ; i<=9 ; i++){ 74 let box1 = appendBox(i); 75 for(let i =1 ; i<=9 ; i++){ 76 let sel1 = appendSel(i, box1); 77 for(let i =0 ; i<=9 ; i++){ 78 appendOpt(i, sel1); 79 } 80 } 81} 82 83

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1for(let k=1 ; k<=9 ; k++){ 2 if(igyou ==="k"){ 3 kouho = kouho.replace("k",""); 4 } 5}

このif文だと「igyouに入っている文字列が"k"のとき」しか置換できません。
おそらく意図としてはループカウンタのkの値を文字列にして比較したかったのだと思いますが、"k"だと変数kを文字列にしたことにはなりません。

javascript

1for(let k=1 ; k<=9 ; k++){ 2 if(igyou === String(k)){ 3 kouho = kouho.replace(igyou,""); 4 } 5}

でおそらく質問者さんの意図通りの動作だと思います。

投稿2021/03/11 15:46

KoichiSugiyama

総合スコア3041

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

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

shidada

2021/03/11 17:06

なるほど!! string型に直さないといけないのですね。 読んでいただきさらに考えていただき、ありがとうございます。 無事、望んでいる動作になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問