ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:多次元配列について質問) 多次元配列についての質問と解答 2011/09/08 17:35 このQ&Aのポイント Javaの参考書に掲載されていた問題についての質問です。質問では、問題文と解答ソースコードが示されており、特にCの手順についての疑問があります。解答ソースコードでは、2次元配列の各列の合計を求めるための処理が実装されていることに疑問を持っています。 多次元配列について質問 以下は、Javaの参考書に掲載されていたある問題です。 その問題文と解答ソースコードを記載しますので、以下の疑問点に答えていただければ幸いです。 また、僭越ながらお願いがあるのですが、このソースコードを一度実行してから私の質問を見たほうが、より私の疑問点が回答者様にわかると思うので、実行してくだされば幸いです。 問題文:次のA~Cの手順に従ってプログラムを作成しなさい。 A:5×4の2次元配列のint型配列pを作成します。つまり、pは5個の要素を持ち、各要素が「4つの要素を持つintの配列」であるような配列です。 B:次にpの全要素にMath.random()で得られる乱数値を代入しなさい。乱数値は0から10の範囲になるように10倍し、さらにintにキャストして配列の要素に代入しなさい。 C:pの全ての要素を例示のように表示しなさい。(※ここでいう「例示」とは、私がこの質問板にupした画像のこと)ただし、pの各要素を5×4の表と見た時、各列の(縦方向の並び)の合計を、その5×4の表と見た時、各列(縦方向の並び)の合計も例示のように表示しなさい。 ---解答ソースコード(クラス宣言は除きます)--- public static void main(String[]arg){ //A int[][]p=new int[5][4]; //B for(int i=0;i<p.length;i++){ for(int j=0;j<p[i].length;j++){ p[i][j]=(int)(Math.random()*10); } } for(int[]n:p){ for(int m:n){ System.out.print(m+"\t"); } System.out.println();//改行 } //C int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } System.out.println(); for(int m:sum){ System.out.print(m+"\t"); } } 疑問点:Cの手順の解答について疑問なのですが、以下のソースコードで何故各列の合計を求められるかわかりませんでした。しかし、前回ここで質問した際に※解答していただいた方のご教示もあり、疑問点が解決したと思います。その各列の合計が求められる理由は、以下の見解で正しいですか? int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } 例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])が代入され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])が再代入されるので、縦方向に累計されていくということでしょうか? ※ http://okwave.jp/qa/q6993760.html 画像を拡大する 質問の原文を閉じる 質問の原文を表示する みんなの回答 (5) 専門家の回答 質問者が選んだベストアンサー ベストアンサー kmee ベストアンサー率55% (1857/3366) 2011/09/10 02:56 回答No.4 まあ、確かに多少の語弊はあったかもしれませんが。 > 質問者さんが、加算して代入という意味も含めて「代入」と言っているのならその解釈であっていると思います。 深読みして解釈すればそうかもしれませんけど、やはり「代入」と言われたら、「代入先の内容を代入元にそのまま置き換える」という動作を思い浮べます。こういう場所では、「用語」を別の意味で使われると、誤解の元ではないでしょうか。 特に、質問者さんは、過去の質問からして「用語」にはこだわる方のようなので。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (4) kmee ベストアンサー率55% (1857/3366) 2011/09/12 18:54 回答No.5 ですから「再代入」ってなんですか? 私には「代入を再度行う」という意味にしかとれません。 「代入」自体は計算など行いません。 少なくとも、私は「代入」という言葉を、「変数(またはそれに相当するもの)の値を被代入値に変更する。それまでの変数値は放棄される」という意味で使っています。それ以外の意味で使うのなら、代入、再代入の定義をしてください。 あなたの解釈が正しかったとしても、それが相手に正しく伝えられなければ、「あなたの解釈が間違っているのか、理解は正しいけど表現できてないだけなのか?」の判断などできません。 できれば、既にある用語は既にある意味で使っていただきたいのですが。 > sum[0]にn[0](=p[1][0])が再代入されるので、縦方向に累計されていくということでしょうか? 私の「代入」では、「再代入」したら、sum[0]がそれまでの値を廃棄してn[0](=p[1][0])の値になるだけで、集計など行いません。 その結果、最終的に最後に代入した sum[x] = p[4][x] になるだけです。 私の「代入」を使って表現するなら sum[0]にn[0](=p[1][0])を「加えた値がsum[0]に代入」されるので、縦方向に累計されていく となります。 質問者 補足 2011/09/13 05:02 丁重なご回答誠にありがとうございます! すいません、、用語の使い方気をつけます。 このような理解ならだいじょうぶですか? 「例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])を加えた値がsum[0]に代入され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])を加えた値がsum[0]に代入されるので、縦方向に累計されていく」 ようやくわかってきました! 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 axsies ベストアンサー率64% (38/59) 2011/09/09 11:28 回答No.3 No1の方の「代入されない」というのは少し誤解を生みそうですが、 質問者さんが、加算して代入という意味も含めて「代入」と言っているのならその解釈であっていると思います。 a+=xはa=a+xと等価です。(多次元配列まで進んでいるならすでにやっているとは思いますが一応) 結局議論となっているコードを実行順通りに書けば、 sum[0]+=p[0][0] sum[1]+=p[0][1] sum[2]+=p[0][2] sum[3]+=p[0][3] sum[0]+=p[1][0] sum[1]+=p[1][1] sum[2]+=p[1][2] ...(略) sum[1]+=p[4][1] sum[2]+=p[4][2] sum[3]+=p[4][3] です。 挙動がよくわからないときは、頭の中で考えるより 実際にデバッガで1ステップごとに追いかけたり、 計算途中を出力してみた方が理解が早い事が多いです。 int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ System.out.printf("sum[%d](=%d) += %d\n", j,sum[j],n[j]); // ←こんな感じの出力を適当に挟んでみる(書式は好き好きですが) sum[j]+=n[j]; } } 質問者 補足 2011/09/12 08:05 「例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])が「再代入」され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])が再代入されるので、縦方向に累計されていくということでしょうか?」 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 noname#147388 2011/09/09 09:31 回答No.2 http://qa.itmedia.co.jp/qa6993760.html 質問者 お礼 2011/09/12 08:02 ごめんなさい、、 僕質問のマナーがなってませんでした。。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 kmee ベストアンサー率55% (1857/3366) 2011/09/08 17:56 回答No.1 > sum[0]にn[0](=p[0][0])が代入 > sum[0]にn[0](=p[1][0])が再代入 「代入」はされません。 参考書やリファレンスマニュアルで「 += 」という演算子(複合代入演算子)の意味を調べてください あと > int[]sum=new int[p[0].length]; としたときに、sumの初期状態がどうなっているか調べてください 質問者 お礼 2011/09/12 08:02 いつもご回答誠にありがとうございます! 以下で、回答で理解したことを確認させていだきます。 確認1:>「代入」はされません。 「再代入」ですよね? つまり、質問文を訂正すると 「例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])が「再代入」され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])が再代入されるので、縦方向に累計されていくということでしょうか?」 このようになりますよね? 確認2:kmeeさんんが > int[]sum=new int[p[0].length]; >としたときに、sumの初期状態がどうなっているか調べてください 上記の問いかけをした意図は、「sumの配列の初期化規定値が0になっているから、調べてごらんなさい。だからこそ、sum[0]にn[0](=p[0][0])に『再代入』ができるんだ。」ということですよね?kmeeさんが、僕が「代入」と表現した理由として、初期化規定値で0になっていることがわからないため(再代入は初期化されてないとできないから)だと思ったから、そのような問いかけをされたんですよね? 質問者 補足 2011/09/12 08:06 あ、、間違えてお礼に書いちゃいました。。 ごめんなさい!補足待ってます! 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Java 関連するQ&A 多次元配列について質問 以下は、Javaの参考書に掲載されていたある問題です。 その問題文と解答ソースコードを記載しますので、以下の疑問点に答えていただければ幸いです。 また、僭越ながらお願いがあるのですが、このソースコードを一度実行してから私の質問を見たほうが、より私の疑問点が回答者様にわかると思うので、実行してくだされば幸いです。 問題文:次のA~Cの手順に従ってプログラムを作成しなさい。 A:5×4の2次元配列のint型配列pを作成します。つまり、pは5個の要素を持ち、各要素が「4つの要素を持つintの配列」であるような配列です。 B:次にpの全要素にMath.random()で得られる乱数値を代入しなさい。乱数値は0から10の範囲になるように10倍し、さらにintにキャストして配列の要素に代入しなさい。 C:pの全ての要素を例示のように表示しなさい。(※ここでいう「例示」とは、私がこの質問板にupした画像のこと)ただし、pの各要素を5×4の表と見た時、各列の(縦方向の並び)の合計を、その5×4の表と見た時、各列(縦方向の並び)の合計も例示のように表示しなさい。 ---解答ソースコード(クラス宣言は除きます)--- public static void main(String[]arg){ //A int[][]p=new int[5][4]; //B for(int i=0;i<p.length;i++){ for(int j=0;j<p[i].length;j++){ p[i][j]=(int)(Math.random()*10); } } for(int[]n:p){ for(int m:n){ System.out.print(m+"\t"); } System.out.println();//改行 } //C int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } System.out.println(); for(int m:sum){ System.out.print(m+"\t"); } } 疑問点:Cの手順の解答について疑問なのですが、以下のソースコードで何故各列の合計を求められるかわかりません。何故ですか?凄く頭が引きちぎれるほど考えたのですがわかりませんでした。 int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } だって、例えば拡張for文でpの0番目の要素を取り出して、さらにfor文でその0番目の要素の0番目、1番目、2番目、3番目をsumに累計するといったように、縦方向でなく「横方向」に合計するソースコードに僕は思えるんですよ。何故縦方向に合計できるんですか?たしかに実行すると縦方向に合計されてるので、縦方向に合計するものには間違いなのだけれど、、 javaの二次元配列について質問です 配列上にあるただ一つの1を入力に応じて移動させるプログラムを作っています。 たとえば0が入力されたら 0, 0, 0 0, 1, 0 0, 1, 0 → 0, 0, 0 0, 0, 0 0, 0, 0 という風に移動させ、端に行ったら移動できないようにしたいです。 今書いたプログラムだと、最初にある1が残ったままになってしまいます。 int[] p = {-1, -1}; int[][] im = new int[3][3]; Scanner scn = new Scanner(System.in); for (int i = 0; i < p.length; i++) { p[i] = 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } int n = 0; n = scn.nextInt(); if (n == 0) { p[0] -= 1; } else if (n == 1) { p[1] += 1; } else if (n == 2) { p[0] += 1; } else if (n == 3) { p[1] -= 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } Javaの二次元配列についてです 配列要素を 1, 2, 3, 4, 5 2, 2, 3, 4, 5 3, 3, 3, 4, 5 4, 4, 4, 4, 5 5, 5, 5, 5, 5 のようにしたいのですがどうすればよろしいでしょうか? int[][] a = new int[5][5]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { ~ここの処理を教えてください~ } } ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 非常にはずかしい質問ですが 配列の質問です。 C言語の勉強で時間が経つごとに、肝心の基礎が忘れがちになるのですよね。 それに、配列に対しての説明ってほとんど文字列ばかりで整数はみつからないです。 今回の質問は ・int型配列の要素ひとつずつ代入するにはどうするか? ・同じ数字を代入させないにはどうするか? ・配列中n個の要素を表示させるにはどうするのか? 条件 1、配列の要素はn個 2、同じ数は× 一応かいてみました。 { int buffer[6], i, j, signal ; srand((unsigned int)time(NULL)); for( i = 0 ; i < 6 ; i++){ buffer[i] = rand()%42+1; for( signal = 0 , j = 0 ; j < i ; j++ ){ if(buffer[i] == buffer[j]){signal = 1; break;} } if(signal == 0){break;} } printf("%d\n",buffer); 多次元配列の処理について 多次元配列を扱った処理を行ないたいのですが、一部で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; } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。 二次元配列に関する質問です。 一次元配列はわかるのですが二次元配列になると、わからない時があります。 <ソース> #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}, }; という使い方をしているのですが・・・。 どうちがうのでしょうか? 多次元配列とfor文について javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee; ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?! arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください! C言語で3次元配列の課題をしています。 C言語で3次元配列の課題をしています。 5人の学生の3科目(国数英)の点数を前期と後期の2回分について三次元配列に入力し、各学生の前期と後期の合計と前・後期の合計を求めるプログラムです。 配列に数値を格納するあたりまでは分かったものの、そこから先がよくわからなくなってしまいました。どなたか解説とともに、成績の出力の仕方を教えていただけないでしょうか。for文を使えばいいというのはわかりますが・・・。 以下に出来た部分までのソースを載せておきます。まだ未熟な上、変なミスがあるかもしれません。 #include <stdio.h> main() { /*配列を宣言*/ int score[0][3][5],i,j,k; int total,sum[2][5]; /*配列に成績を入力*/ for(i=0;i<2;i++){ for(j=0;j<3;j++){ for(k=0;k<5;k++){ printf("score[%d][%d][%d] = ",i,j,k); scanf("%d", &score[i][j][k]); } } } /*合計を計算する*/ for(i=0;i<5;i++){ for(j=0;j<2;j++){ total=0; for(k=0;k<3;k++){ total = total + score[i][j][k]; } sum[i][k]=total; } sum[2][k]=sum[0][k]+sum[1][k]; } /*出力する*/ /*??*/ } ※三次元配列のscoreの始めの[]は、0が前期成績、1が後期成績を格納する部分です。 3次元配列のループによる比較の回数を減らす 以下は正の整数が入った3次元配列form[30][20][8]で、中身が一致している2カ所に-1を代入してループを抜けるというプログラムの一部分なんですが、無駄なループを減らすにはどういった変更をすればいいでしょうか? form[30][20][8]は変更しない方向でお願いします。 check: for(int i=0;i<30;i++){ for(int j=0;j<20;j++){ for(int k=0;k<8;k++){ for(int l=0;l<30;l++){ for(int m=0;m<20;m++){ for(int n=0;n<8;n++){ if(form[i][j][k]==form[l][m][n]&&!(i==l&&j==m&&k==n)form[i][j][k]!=-1) count++; form[i][j][k]=-1; form[l][m][n]=-1; break check; } } } } } } } Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。 Javascriptで二次元配列で高次元の配列サイズを取得する方法を教えてください。 var data = [ [1,2,3], [4,5,6], [7,8,9] ]; for (var i = 0; i < data.length; i++){ for (var j = 0; j < data[i].length; j++){ <--- ここで lengthのオブジェクトがNullというエラーになります。 alert(data[i][j]); } } よろしくお願いいたします。 配列の頭に要素を挿入する方法 初心者です。配列でご教授お願いします。 インデックス0からひとつずつ要素をずらして、配列の一番前に要素を挿入するにはどうしたらいいのでしょうか? int[] a = new int[10]; int n = a.length; for (int i = n-1; i < 1; i--){ a[i] = a[i-1]; } a[0] = 新しい要素 といった感じで書いたのですが、どうもループの中が実行されていないようなのです。 よろしくお願いいたします。 C/C++の配列について 配列の作り方について nは特定の数でarr[3]以降の値をfor文で代入したいのですが 同じfor文で値を代入すると(1)は不正解で(2)が正解になります 小さい数だと見た目は同じで何が違うのか解らないのですが、これは何がちがうのでしょうか? (1)の0, 0, 1以降は全て初期値として0が入ると認識してたのですがそれも違いますか? (1) int arr[n]={0, 0, 1}; (2) int arr[n]; arr[0]=0; arr[1]=0; arr[2]=1; for (int i=3; i<n; i++) { arr[i]=略 } よろしくお願いします AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム C++ の多次元配列なんですが int i,j; int (*p)[2][3]; int *x; int a[2][3] = {{1,2,3},{4,5,6}}; p = &a; x = &a[0][0]; for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 3; j++) { printf (" %d", (*p)[i][j]); } } printf (" | "); for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 3; j++) { printf (" %d", *(x + ( i * 3 + j )) ); } } printf (" | "); for ( i = 0; i < 6; i++ ) { printf (" %d", *(x + i) ); } これで大丈夫でしょか? 配列 隣の要素を参照するのですが 最初に 8つの要素を持つint型の配列(配列名dat)があるとして、最初全要素に「0」が代入されています。scanf関数でn番の要素に「1」が代入されたとします。n番なのでどこに「1」が代入されたかはわからないです。 問題 for文を使用して何番目に「1」が入力されたかを調べますが、以下のルールに従がわなくてなならいです。 ルール ・現在の要素から隣の要素を参照しなくてはいけない。 ・参照する範囲は要素の数「0~7」番 #include<stdio.h> void main() { int i, dat[8]; for(i=0;i<8;i++){ dat[i]=0; } i=0; scanf("%d",&i); dat[i] = 1; for(i=0;i<8;i++){ if(dat[i+1] == 1){print("%d列目に「1」がありました", i+1); } } でも…こうすると0番目の要素が参照されないですそれを回避するには?そして… 最大の要素(dat[7])にきたときは隣を参照しないようにするにはどうすればよいのでしょう? 配列について質問です。 学校で以下のような内容のプログラムを組む課題が出されました。 「数を格納した配列の各要素の和を出力せよ。」 一応組むことはできたのですが、引っかかることがあります。 私が組んだのは下のような要素の個数は引数で定義、 各要素は標準入力で読み込むというものです。 import java.io.*; class main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); int n =Integer.parseInt(args[0]); int[] a = new int[n]; for(int i=0;i<n;i++){ a[i] = Integer.parseInt(br.readLine()); } int b=0; for(int i=0;i<n;i++){ b+=a[i]; } System.out.println("sum = "+b); } } ここで質問なのですが、仮に引数で5と入力すると 配列a[]はa[0]~a[5]の計6個できると思うんです。 でも、実行してみると要素数はa[4]の5個までしかできず、 最後のa[5]はどこに行ったのだろう?というものです。 n × n の二次元配列の各要素に vector を突っ込みたいと思っ n × n の二次元配列の各要素に vector を突っ込みたいと思っています。 ちょうど三次元グラフで n × n の地表に可変な高さの草が生えてるようなのを想像していただければやりたいことが分かっていただけるかと。 で、このようにしてまずは確保しました。 int i, n = 2; vector<int> ***vecMatrix; vecMatrix = new vector<int>**[ n ]; for (i = 0 ; i < n ; i++) vecMatrix[ i ] = new vector<int>*[ n ]; ここまでは問題ないのですが、次に vecMatrix[ i ][ j ] に対して要素を格納しようとして、 vecMatrix[ 0 ][ 0 ]->push_back( 1 ); とすると segmentation fault で落ちます。 ううーん、なぜでしょう。 配列について class Array01{ public static void main(String[] args){ int[][] ia = {{11,12},{21},{41,42,44}}; for(int i = 0; i < ia.length; i++){ for(int j = 0; j < ia[i].length; j++ ){ System.out.print(ia[i][j] + " "); } System.out.println(); } } } } (i < ia.length) と (j < ia[i].length)のとこの意味が分かりません。特にiaとia[i]の違いなんか教えてもらえると助かります。for文については理解してるんですが・・・ 二次元配列に数字をランダムに入れる --------------------------- | 2 | 3 | 7 | 4 | 1 || 17 |<横合計> --------------------------- | 6 | 1 | 2 | 3 | / || // | --------------------------- | 1 | / | / | / | / || // | --------------------------- | 2 | / | / | / | / || // | --------------------------- | 3 | / | / | / | / || // | --------------------------- --------------------------- | 14 | / | / | / | / || // |<全合計> --------------------------- <縦合計> このように表示される。 …という処理がしたいのですがどういう処理を書けば良いのかわかりません。 理解した(1)と(2)の乱数発生の文を書いておきます。 *二次元配列を作成* a = new Array(5) for (i = 0; i <= a.length-1; i++){ //1次元 a[i] = new Array(5) for (j = 0; j <= a[i].length-1; j++){ //2次元 a[i][j] = "["+ i +","+ j +"]" var g = ""; document.write(a[i][j]); } } *乱数を100回発生* var z = ""; for(k = 1; k <= 100; k++){ z = Math.round(Math.random()); //発生した乱数をzに代入 } 以上、 よろしくお願いいたします。 配列のコピーをして値を返したいが //配列のコピーをして値を返したい import java.util.*; public class Test7_22 { static int[] arrayClone(int[] a){ int[] b = new int[a.length]; for(int i =0;i>a.length;i++) b[i] = a[i];//ここで代入されるはず return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("要素数:"); int n = std.nextInt(); int[] a = new int[n]; for(int i=0;i<n;i++){ System.out.print("a["+i+"]="); a[i] = std.nextInt(); } int[] x = arrayClone(a); for(int i=0;i<a.length;i++) System.out.println("x["+i+"]="+x[i]); } } //コンパイルするとb[0] = 0になる 二次元配列とポインタについてよくわかりません 二次元配列の要素を代入しようと思って double *pa; for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ printf("A[%d,%d]=", i + 1, j + 1 ); scanf("%lf", pa + i + j); printf("A[%d,%d]=%g\n", i + 1, j + 1, *(*(pa + i) + j) );}} とやっているのですがどうやらscanfで上手くいかず最後のprintfが表示されません あと double (*pb)[4]; printf("4 x 4 行列 Bの要素を入力してください>\n"); for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ printf("B[%d,%d]=", i + 1, j + 1 ); scanf("%lf", &pb[i][j]);}} もうまくいきません (二通りの方法でしなければ成らないので) どうしたらいいでしょうか? 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
補足
丁重なご回答誠にありがとうございます! すいません、、用語の使い方気をつけます。 このような理解ならだいじょうぶですか? 「例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])を加えた値がsum[0]に代入され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])を加えた値がsum[0]に代入されるので、縦方向に累計されていく」 ようやくわかってきました!