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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1401閲覧

配列変数に値が代入できない

cat_tom

総合スコア12

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2018/07/23 02:04

for文で繰り返し処理が上手くいかない。インデックスを指定すると上手くいくのですが、繰り返し処理では値が代入できません。解決方法をお教えください。
*処理内容と問題点
前提.get_textには、142文字(半角)が入ってる。
処理1.get_textから1文字ずつ取りだし、配列flg[]に格納
処理2.2次元配列を初期化する
処理3.flg[]から取り出した値をz[][]に格納
*処理3を解決できません

//処理1:文字列を一次配列に入れる
var flg = new Array();
var cnt = get_text.length;
var i;
for ( i = 0 ; i < cnt ; i++ ){
flg[i] = get_text.charAt(i);
}

//処理2:2次元配列
var z = [];
for(i=0; i< cnt ; i++){
z[i] = [];
for(j=0; j<2; j++){
z[i][j] = '0';
}
}

// 処理3
//例:指定位置から文字を取り出し、z[][]に入れる
//これは成功!
var j=8;
z[j+1][0] = flg[j12+5];
z[j+1][1] = flg[j
12+10];

/* 繰り返し処理では、z[][]に値が入らない
var j;
for ( j == 0 ; j <= 142 ; ++j ){
if( j == 0 ){
z[j+1][0] = flg[j+5];
z[j+1][1] = flg[j+10];
} else if( 1 <= j || j < 10 ){
z[j+1][0] = flg[i12+5];
z[j+1][1] = flg[i
12+10];
} else if( j == 10 ) {
z[j+1][0] = flg[j12+6];
z[j+1][1] = flg[j
12+15];
}
++j;
}
*/

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

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

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

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

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

og24715

2018/07/23 02:13

コードはコードブロック(```)で囲むと見栄えが良くなります
guest

回答2

0

ベストアンサー

具体的なサンプルを使えば挙動は確認できますよね?

javascript

1var flg = []; 2var get_text="abcdef"; 3var cnt = get_text.length; 4for(var i = 0 ; i < cnt ; i++ ){ 5flg[i] = get_text.charAt(i); 6} 7console.log(flg);

でもこれなら以下で十分

javascript

1var flg=get_text.split(""); 2console.log(flg);

2番めも

javascript

1var get_text="abcdef"; 2var cnt = get_text.length; 3var z1 = []; 4for(i=0; i< cnt ; i++){ 5 z1[i] = []; 6 for(j=0; j<2; j++){ 7 z1[i][j] = '0'; 8 } 9} 10console.log(z1);

なら

javascript

1var z2 = []; 2for(i=0; i< cnt ; i++){ 3 z2[i] = ["0","0"]; 4} 5console.log(z2);

だし、こうすれば1行でかけます

javascript

1 2var z3=new Array(cnt).fill(["0","0"]); 3console.log(z3);

投稿2018/07/23 03:19

yambejp

総合スコア114843

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

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

yambejp

2018/07/23 03:23

> 1 <= j || j < 10 条件的にorじゃないですよね
think49

2018/07/23 04:04 編集

そうでしょうか。 AND条件にしたら、絶対に成立しない条件式になるように読めますが。
yambejp

2018/07/23 04:35

jが1以上 or jが10未満ってjはなんでもOKってなりませんか? 仮にjが-100でも10未満だし、100でも1以上ですから・・
think49

2018/07/23 10:06

ああ、確かに! if(true) と等価ですね。
guest

0

for ( j == 0 ; j <= 142 ; ++j ){
初期化式が j == 0 というように比較になっているので、これでは for ブロックは一度も実行されません。
修正後の動作検証はしてないのでその他の間違いについては見ていません。

投稿2018/07/23 02:17

spookybird

総合スコア1803

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

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

cat_tom

2018/07/23 02:24

for ( j == 0 ; j <= 142 ; ++j ){  == を = に修正しました。でも配列に代入できない状態です。
cat_tom

2018/07/23 02:37

z[j+1][0] = flg[i*12+5]; z[j+1][1] = flg[i*12+10]; も i は j に修正します。 でも、できない。
spookybird

2018/07/23 02:59

できないとは具体的にどういう状態ですか。 - 処理は完遂するが `z` に期待する値が入っていない - 処理の途中でエラーが発生する 手元で試したらそれっぽく動作して `z` の index=0 ~ 11まで、奇数インデックスの要素として get_text に定義した文字列から1文字ずつ拾って代入されていました。 j が 12 以上になった時点で、`i * 12 + 5` の結果が142を超えてしまうので、flgから値を取得できずに undefined が代入されています。
cat_tom

2018/07/23 04:01

spookybirdさん、ありがとうございます。よく考えると、for の考え方が間違っているようです。 yambejpさん、og24715さん、ありがとうございました。よく考えて、作りなおします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問