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

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

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

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

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

Q&A

解決済

2回答

5619閲覧

二次元配列のときの2重For文の処理の流れについてご解説お願いいたします。

fish-sakana

総合スコア7

for

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

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

0グッド

0クリップ

投稿2020/04/19 08:54

編集2020/04/19 09:06

質問があります。
二次元配列のときの二重for文の処理がわからなくなってしまいました。

恐縮ですが、二重for文の処理の流れについて、番号順で解説していただきたいです。
また、このサンプルコードはコード2に記載しています。
よろしくお願いいたします。

一応、一回だけのfor文の処理は理解しています。
このサンプルコードはコード1に書いています。
また、自分が理解している範囲で、コード1のfor文の処理を記載します。

以下、コード1の処理の流れ *forは一回のみ
①array1に10,20,30の要素を三つ配列として入れる。 =>変数array1の配列の数が3つになる。
②for文の()内の処理に移動する。
③1回目の処理のときに、i = 0となる。
④i < array1.length;のチェックをしてtrueになる。 => System.outの処理へ進む。
⑤一回目の処理をしているので、変数iの値が0で、array1[i]のiに0が代入される。
その結果、array[0]に格納されている10が出力される。
⑥その後、一回目の処理が終わったので、i++の所で、1が加算される。
⑦1回目の最後で、iが1加算される   => i = 1;となる。
⑧2回目のfor文の処理に入る。
⑨  ④から⑧までの流れが i = 3になるまで繰り返される。

Java

1//コード1 2int[] array1 = {10,20,30}; 3 for(int i = 0; i < array1.length; i++){ 4 System.out.println(array1[i]); 5} 6 7実行結果: 810 920 1030

Java

1//コード2 2String[][] array2 = {{"あ","い"},{"か","き","く"}}; 3 4for(int a = 0; a < array2.length; a++){ 5 for(int b = 0; b < array2[a].length; b++) 6 System.out.println(array2[a][b]); 7 } 8} 9 10実行結果: 1112131415

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

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

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

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

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

guest

回答2

0

きちんと理解されているとおもますよ。
コード2の中にコード1をちょっと変形して入れてみましょう。

java

1 //コード2 2 String[][] array2 = {{"あ", "い"}, {"か", "き", "く"}}; 3 for (int a = 0; a < array2.length; a++) { 4 5// for(int b = 0; b < array2[a].length; b++) 6// System.out.println(array2[a][b]); 7 8 //コード1 9 String[] array1 = array2[a]; 10 for(int i = 0; i < array1.length; i++){ 11 System.out.println(array1[i]); 12 } 13 }

投稿2020/04/19 09:07

shiketa

総合スコア3971

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

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

fish-sakana

2020/04/19 09:16

ご回答ありがとうございます。 質問があります。 String[] array1 = array2[a]; この処理は、最初のfor文が、繰り返す時のその回数を代入しているのでしょうか
shiketa

2020/04/19 13:00

「回数」ではありません。array2[a]は、array2のa番目の要素です。aが0なら「{"あ", "い"}」、aが1なら「{"か", "き", "く"}」ということ。 こう読めれば、コード1のint[] array1 = {10,20,30};とやってることは同じことだと理解できるかと。
fish-sakana

2020/04/23 02:34

ご回答ありがとうございます。 おかげさまで、理解できました。
guest

0

ベストアンサー

Java

1String[][] array2 = {{"あ","い"},{"か","き","く"}}; 2 3 for(int a = 0; a < array2.length; a++){ 4 for(int b = 0; b < array2[a].length; b++) 5 System.out.println(array2[a][b]); 6 //a=0で[a=0][b=0]=”あ”, [a=0][b=1]=”い” まで呼び出すと 7 //上のfor分でa++され、 8 //a=1となり[a=1][b=0]=”か”, [a=1][b=1]=”き”,[a=1][b=2]=”く” という順序です 9 } 10 } 11 12}

投稿2020/04/19 09:06

編集2020/04/19 09:12
nimosoh

総合スコア42

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

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

fish-sakana

2020/04/19 09:10

ご回答ありがとうございます。 質問があります 要素のまとまりごとに外側のfor文で処理してから、内側のfor文へと処理が進むという事でしょうか
nimosoh

2020/04/19 09:26

1つ目のまとまり(0番目)を内側のループ文で処理(あ、い)してから、外側でa+1され、2つ目のまとまり(1番目)を処理(か、き、く).....という感じですね。
nimosoh

2020/04/19 09:35

内側のループが終わってから外側で+1、内側のループが終わってから外側で+1、を外側の条件から外れるまで繰り返すという感じです。
fish-sakana

2020/04/19 09:37

ご回答ありがとうございます。 重ねて質問があります。 1つ目のまとまり(0番目)を内側のループ文で処理(あ、い)してから、外側でa+1され、2つ目のまとまり(1番目)を処理(か、き、く).....という感じですね。 ⇒この場合、要素のまとまりが三つある、三次元配列だったなら、for文も3つ書く必要があるという事でしょうか?
nimosoh

2020/04/19 09:44

その通りです!!
nimosoh

2020/04/19 09:55 編集

3次元だとイメージがしづらいですけど、 白いルービックキューブに色を塗っていくイメージで、縦、横、幅なら順番に縦から処理し始め、縦が全部塗り終わってから1つ横に進んでまた縦に塗る。横の最後(一面)を塗ってからやっと幅に1が足されまた縦に色を塗る、を全て色が塗れるまで繰り返す。その場合、 一番外側のループが幅、真ん中のループが横、一番内側のループが縦を司る感じ。 わかりにくいですかね。。。
fish-sakana

2020/04/19 10:03

申し訳ありません。 自分の理解不足で、あまり理解できませんでした。 幅と横の違いがあまり理解できませんでした。 3次元以上の配列だと、行(レコード)や列(カラム)とは、考え方がかなり変わるのでしょうか?
nimosoh

2020/04/19 10:09

混乱させてしまいましたね。。申し訳ないです。 考え方は全く変わりませんよ。for文をもう1行増やすだけです
fish-sakana

2020/04/19 10:57

ご返信ありがとうございます。 お陰様で、2次元配列と2重for構文の処理についてかなり理解できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問