• ベストアンサー

二次元配列を作り、要素に値を入れていくには?

二次元配列がそもそもうまく作れていません。一応以下のようにつくってみましたが、うまく動作していないようです。 どこが原因でしょうか? for(i=0; i<=gapnum; ++i){ for(iii=0; iii<=gapnum; ++iii){ if(lng > lat2){ if(ICONarray[[i],[iii]]==""){ ICONarray[[i],[iii]]=d_id; }else{ CONarray[[i],[iii]]=ICONarray[[i],[iii]]+","+d_id; }; } } }

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★多次元配列について ・文章での説明が苦手なのでサンプルを載せます。 -------------------- 1次元配列: var ICONarray = [  'a0',  'b1',  'c2',  'd3' ]; for ( var i = 0 ; i < ICONarray.length ; i++ ){  document.write( ICONarray[i] );  document.write( '<BR>' ); } -------------------- 2次元配列: var ICONarray = [  ['a0','a1','a2','a3'],  ['b0','b1','b2','b3'],  ['c0','c1','c2','c3'] ]; for ( var j = 0 ; j < ICONarray.length ; j++ ){  for ( var i = 0 ; i < ICONarray[0].length ; i++ ){   document.write( ICONarray[j][i] );   document.write( '<BR>' );  }  document.write( '<BR>' ); } -------------------- 3次元配列: var ICONarray = [  [   ['a0','a1','a2','a3'],   ['b0','b1','b2','b3'],   ['c0','c1','c2','c3']  ],[   ['a0','a1','a2','a3'],   ['b0','b1','b2','b3'],   ['c0','c1','c2','c3']  ] ]; for ( var k = 0 ; k < ICONarray.length ; k++ ){  for ( var j = 0 ; j < ICONarray[0].length ; j++ ){   for ( var i = 0 ; i < ICONarray[0][0].length ; i++ ){    document.write( ICONarray[k][j][i] );    document.write( '<BR>' );   }   document.write( '<BR>' );  }  document.write( '<BR>' ); } -------------------- ↑上記のようになります。 本題: for ( i = 0 ; i < ICONarray.length ; i++ ){  for ( iii = 0 ; iii < ICONarray[0].length ; iii++ ){   if ( lng > lat2 ){    if ( ICONarray[i][iii] == "" ){     ICONarray[i][iii] = d_id;    }else{     CONarray[i][iii] = ICONarray[i][iii] + "," + d_id;    };   }  } } 原因: ・2次元配列の宣言(定義)は [[…],[…],[…]] としますが、参照は [j][i] とします。  [j] と [i] の間にカンマ文字は必要ないのです。  間違い⇒ICONarray[[i],[iii]]  正しい⇒ICONarray[i][iii] ・また、2次元配列の要素数を求めるときは  低次元⇒ICONarray[0].length  高次元⇒ICONarray.length  で配列の添え字数(要素数)が分かります。 ・以上。参考に。→特に2次元配列の定義と参照を参考にして下さい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#39970
noname#39970
回答No.3

>同様にダメです。has no propertiesとなってしまいます だから・・・var使って配列も初期化を・・・って・・・

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> [AREAarray[i][iii]]=[AREAarray[i][iii]]+1; この書き方も > AREAarray[[i],[iii]] この書き方も、ともに誤っています。 前者は AREAarray[i][iii]=AREAarray[i][iii]+1; に、後者は AREAarray[i][iii] に、それぞれ修正してください。

saak888
質問者

補足

ご回答ありがとうございます。 同様にダメです。has no propertiesとなってしまいます。 for(i=0; i<=gapnum; ++i){ var South_West_lng1 = South_West_lng+between_lng*i; var South_West_lng2 = South_West_lng1+between_lng; for(iii=0; iii<=gapnum; ++iii){ var South_West_lat1 = South_West_lat+between_lat*iii; var South_West_lat2 = South_West_lat1+between_lat; // alert(South_West_lng1+"<"+lng+"<"+South_West_lng2+" "+South_West_lat1+"<"+lat+"<"+South_West_lat2); if(((lng >= South_West_lng1)&&(lng < South_West_lng2))&&((lat >= South_West_lat1)&&(lat < South_West_lat2))){ if(ICONarray[i][iii]){ ICONarray[i][iii]=d_id; }else{ ICONarray[i][iii]=ICONarray[i][iii]+","+d_id; AREAarray[i][iii]=AREAarray[i][iii]+1; }; // alert(South_West_lng1+"<"+lng+"<"+South_West_lng2+" "+South_West_lat1+"<"+lat+"<"+South_West_lat2+" i="+i+"ii="+iii+" ID="+ICONarray[i][iii]+"num="+AREAarray[i][iii]); } } }

全文を見る
すると、全ての回答が全文表示されます。
noname#39970
noname#39970
回答No.1

[[i],[iii]] じゃなく [i][iii] じゃない? ICONarray[i][iii] あと一応 var ICONarray = []; で初期化しといた方が良いかも。

saak888
質問者

補足

ご回答ありがとうございます。 一応こんなかんじにしてみましたが、、、 やっぱり ICONarray[i][iii]でも [ICONarray[i][iii]]でも 駄目みたいですね。has no propertiesとなってしまいますね。 for(i=0; i<=gapnum; ++i){ var South_West_lng1 = South_West_lng+between_lng*i; var South_West_lng2 = South_West_lng1+between_lng; for(iii=0; iii<=gapnum; ++iii){ var South_West_lat1 = South_West_lat+between_lat*iii; var South_West_lat2 = South_West_lat1+between_lat; // alert(South_West_lng1+"<"+lng+"<"+South_West_lng2+" "+South_West_lat1+"<"+lat+"<"+South_West_lat2); if(((lng >= South_West_lng1)&&(lng < South_West_lng2))&&((lat >= South_West_lat1)&&(lat < South_West_lat2))){ if([ICONarray[i][iii]]){ [ICONarray[i][iii]]=d_id; }else{ [ICONarray[i][iii]]=[ICONarray[i][iii]]+","+d_id; [AREAarray[i][iii]]=[AREAarray[i][iii]]+1; }; // alert(South_West_lng1+"<"+lng+"<"+South_West_lng2+" "+South_West_lat1+"<"+lat+"<"+South_West_lat2+" i="+i+"ii="+iii+" ID="+ICONarray[[i],[iii]]+"num="+AREAarray[[i],[iii]]); } } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【C言語を教えてください!】2次元配列について

    【C言語を教えてください!】2次元配列について 2次元配列を用いて、コンソール画面(ターミナル)の中央付近に*を表示させるプログラムを作りたいのですがさっぱり分かりません。 画面の大きさは半角で横80 縦25です。 25は奇数ですので40×12に表示したいと思います。 2重ループでなら出来たのですが配列でのやり方がわかりません。 #include<stdio.h> main() { int i,j; for(i=0;i<25;i++){ for(j=0;j<80;j++){ if(i==12&j==39){ putchar('*'); }else{ putchar(' '); } } } return 0; } 回答お願いします!

  • 多次元配列の処理について

    多次元配列を扱った処理を行ないたいのですが、一部でnullを受け取ってしまい、処理を行うことができません。 引数の配列には次のようなテキストが入っています。 --配列の内容-- 0,名詞-一般,1,5, 0,名詞-数,2,6, 0,名詞-接尾-助数詞,3,7, -------------- この配列をコマンドラインに書き出すと正確に表示されます。 しかし、配列の内容を参照して処理を行なうと2列目の処理のときにnullを参照してしまいます。 プログラムは以下のとおりです。 ---プログラム--- public class Dist {   public static int zairyo(String[][] date) {    int a = 0;    int b = 0;    int c = 0;    int d = 0;    int e = 0;    if(date != null) {     int f = 0;     System.out.println("//Dist//");     for(int m = 0; m < date.length; m++) {      for(int n = 0; n < date[0].length; n++) {       if(date[m][n] != null) {        System.out.print(date[m][n] + "\t");        f++;        if(f == date[0].length) {         System.out.println("");         f = 0;        }       }      }     }     for(int i = 0; i < date.length; i++) {      if(date[i][1] != null) {       if(date[i][1] == "名詞-一般")        a++;       if(date[i][1] == "名詞-数")        b++;       if(date[i][1] == "名詞-接尾-助数詞")        c++;      }else System.out.println("2列目null");     }     int j = date.length - 1;     d = Integer.parseInt(date[j][2]);     e = Integer.parseInt(date[j][3]);    }else System.out.println("Dist:null");    if(a > 0 && b > 0 && c > 0 && d <= 10 && e <= 15) {     return 1;    }else return 0;   } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。

  • 3次元配列を2次元配列にする方法はありますか?

    3次元配列を2次元配列にする方法はありますか? すいません、初心者です。 オープンソースとyahooとgoogleのAPIを使って統合型メタ検索エンジンを作っています。 yahooの結果の配列は2次元配列で出せました。 $search_results[$i]["url"] google APIは1回のリクエストで8件までしか呼び出せないみたいなので、 curl_multi関数を使って複数のリクエストを同時に取得しています。 そうしたら結果の配列は三次元配列になりました。 $search_results[$id][$i]["url"] 以下googleの関数です。curl_multiの部分等、文字数の関係で省略しています。 省略した部分のソースは下記リンクにのっています。 http://phpspot.org/blog/archives/2008/02/phpapi.html function search_google($query) { $curls = array(); $search_results = array(); $i=0; $site_results = array( 'http://ajax.googleapis.com/&start=0', 'http://ajax.googleapis.com/&start=8', 'http://ajax.googleapis.com/&start=16', 'http://ajax.googleapis.com/&start=24', 'http://ajax.googleapis.com/&start=32', 'http://ajax.googleapis.com/&start=40', 'http://ajax.googleapis.com/&start=48', 'http://ajax.googleapis.com/&start=56'); foreach($curls as $id=>$c) { $searchs[$id] = curl_multi_getcontent($c);//$cが$site_resultsのリクエスト結果 curl_multi_remove_handle($mh, $c); $json=json_decode($searchs[$id]); if($json->responseStatus != 200){exit();} $responseData = $json->responseData; $results = $responseData->results; for($i=0;$i<count($results);$i++){ $title = $current_result->title; $search_results[$id][$i]["title"]= $title; } } curl_multi_close($mh); return $search_results; } 統合型メタ検索にしたいと考えているのでgoogle配列の変数[$id]同士を結合して yahooの結果と同じく $search_results[$i]["url"] のような二次元配列にしたいのですが、そのようなことは可能ですか? 本当は両方とも3次元配列にするという処理が適切だと思いますが、初心者がオープンソースを改良して使用しているので、どこを直せば3次元配列のものをうまく表示できるのかわからないのです。 わかりにくかったらすいません。どうか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 二次元配列について

    $recordは二次元配列です。 こういうものを書いておりまして、    foreach($record as $key => $val) { if($key > 18){   for($i=1; $i<=25; $i++){ $data = $record[0].",".$i.",".★★★; ★★★の位置に$record[19][1]、$record[20][1]…$record[19][2]、$record[20][2]… という値を順に入れていきたいのですが、どうしたらよいでしょうか。

    • 締切済み
    • PHP
  • 多次元配列の工夫

    現在、あるプログラミングを作成しています。 そこで4次元配列を使用することが必要になってきました。 ---------------------------------------------- 4次元空間 for(a=・・・a++){ for(b=・・・b++){ for(c=・・・c++){ for(d=・・・d++){ if(ある条件が揃った場合) jouken[a][b][c][d]++; }}}} ---------------------------------------------- 以上のようなことをやりたいのですが、 a~cの値は3桁オーダーなので、メモリを食いすぎ、 処理が桁違いに遅くなり(ページング発生?)、 困っています。 これの解決方法としてはどのようなものがありますかね?たとえば、2次元配列を複数個使うなど。 よろしくお願いします。

  • 【MATLAB】任意の多次元配列からの配列の抽出

    ベクトルvから複数の要素を抽出し,新しいベクトルuを生成する方法には,以下のようにインデックスを指定する方法があります. idx = [3 10 15 28]; u = v(idx); この方法を拡張し,以下のようにN次元配列Aのi次元目のインデックスを指定することで複数の配列を抽出し,新しい配列Bを得ようと考えています. idx = [3 10 15 28]; B = A(:,:, ・・・ ,:,idx,:, ・・・ ,:,:); Aの次元Nはi以上の任意の値で,iは予め指定された値である場合, 配列Bを得る方法はございますでしょうか. 現在,私は以下のような方法で計算しておりますが,コマンド「eval」を用いて力技でしのいでいる感じで,最適な方法が他にあるのでは,と考えております. N = length(size(A)); idx = [3 10 15 28]; i = 3; buf = 'A('; for s = 1:N if s == i buf = [buf 'idx']; else buf = [buf ':']; end if s < N buf = [buf ',']; end end buf = [buf ')']; B = eval(buf);

  • 二次元配列に関する質問です。

    一次元配列はわかるのですが二次元配列になると、わからない時があります。 <ソース> #include<stdio.h> int main() { int dat[2][5]={1,2,3,4,5,6,7,8,9,10}; int i; int j; for(i=0;i<2;i++){ for(j=0;j<5;j++){ printf("dat[%d][%d] %d\n",i,j,dat[i][j]); } } return 0; } このプログラムでわからないのは、 int dat[2][5]={1,2,3,4,5,6,7,8,9,10};の部分です。 普段は、int dat[2][5]={{1,2,3,4,5}, {6,7,8,9,10}, }; という使い方をしているのですが・・・。 どうちがうのでしょうか?

  • MPIを用いた並列計算における3次元配列の通信に関して

    以下のプログラムで,ランク0の3次元配列rec_f[][][]に,ランクpの3次元配列id[][][]を,要素ごとではなく,そのままコピーすることを考えています. しかし,途中出力したid[6][24][3]とrec_f[6][24][3]が異なる値になってしまい,その理由が分かりません. 宜しければ,原因と修正箇所をご教示頂けないでしょうか. 宜しくお願い致します. if(my_rank != 0) { MPI_Isend(id, lx * my * mz, MPI_INT,    dest, 0, MPI_COMM_WORLD, &request); if(my_rank == 2) cout << id[6][24][3] << " "; } else {   for(i = 1; i < lx - 1; i ++) {  for(p = 1; p <= p_num-1; p++)   {   source = p;   MPI_Irecv(rec_f, lx * my * mz, MPI_INT, source, 0,                      MPI_COMM_WORLD, &request);  if(p == 2) cout << rec_f[6][24][3] << " ";   } } MPI_Wait(&request,&status);

  • 2次元配列とポインタ配列の違い

    2次元配列とポインタ配列の違いを比較するプログラムを作成したつもりなのですが、下のプログラムの printf("we[%d]=%u\n",i,&we[i][0]); という文がどうやら違うらしいのですが、全く分かりません。 なので、なんとなくでも構わないので分かる方がいらっしゃったらお願いします。 #include<stdio.h> int main(void) { int i; char *we[]={"Monday","Tuesday","Wednesday"}; char ek[][10]={"Monday","Tuesday","Wednesday"}; printf("2次元配列で格納したアドレス\n"); for(i=0;i<3;i++){ printf("ek[%d]=%u\n",i,&ek[i]); } printf("ポインタ配列のアドレス\n"); for(i=0;i<3;i++){ printf("we[%d]=%u\n",i,&we[i]); } printf("ポインタ配列で格納したアドレス\n"); for(i=0;i<3;i++){ printf("we[%d]=%u\n",i,&we[i][0]); } printf("ポインタ配列で格納した文字列\n"); for(i=0;i<3;i++){ printf("we[%d]=\%s\n",i,we[i]); } printf("2次元配列で格納した文字列\n"); for(i=0;i<3;i++){ printf("ek[%d]=\%s\n",i,ek[i]); } return(0); }

  • 2次元配列

    大学の課題なのですが 10×10の2次元配列に、平面のビットパターンが入っているとする(0と1の整数が入っているとする)。左右反転して出力しなさい。 という問題で、自分は以下のプログラムを作ったのですが、うまくうごいてくれません。だれか間違いを指摘していただけないでしょうか。 よろしくお願いします。 #include<stdio.h> int main(void) { int i,j; int data[10][10]={0,1}; for(i=0;i<10;i++){ for(j=0;j<10;j++){ printf("%3d",data[10-i][10-j]); } printf("\n"); } return(0); }

このQ&Aのポイント
  • ノートパソコンを使用していると、通常はちゃんと録画(録音)できているが、HDMIでテレビにつなげているときだけ音が入らない。
  • 音が入らない原因は、パソコンの設定やHDMI接続の問題が考えられる。
  • ソースネクスト株式会社の製品・サービスに関する質問です。
回答を見る