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

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

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

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

Q&A

解決済

3回答

22221閲覧

拡張for文で2次元配列の要素をprintする際について

omikuji

総合スコア60

Java

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

0グッド

2クリップ

投稿2016/07/01 13:56

java

1 2public class test { 3 4 public static void main(String[] args) { 5 int[][] array = {{1,2}, {3,4}, {5,6,7}}; 6 7 for(int[] tmp: array){ 8 for(int val : tmp){ 9 System.out.println(val); 10 } 11 } 12 } 13} 14

このコードを書くと、要素の中身全てをprintしてくれます。
いくつかのコードで試してみましたが、何故このコードを書くことで全ての要素をprintしてくれるのかがわかりません。

どのような仕組みでこのコードは成り立ってますか?

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

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

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

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

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

guest

回答3

0

... いくつかのコードで試してみましたが ...

次のコードと実行例をみて考えてみてください。
イメージ説明

あえて、コードはテキストでは此処に書きません。
ご自分で実際にコードを打ち込んで実行してみてください。

投稿2016/07/01 23:42

編集2016/07/01 23:44
katoy

総合スコア22324

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

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

0

ベストアンサー

これは拡張for文といいます。
内ループ

java

1for(int val : tmp){ 2 System.out.println(val); 3}

使用する変数はtmp(int[])とval(int)です。
int[]型は、[数字]を書かないとオブジェクトを表します。つまり、配列の全要素が渡されるわけです。

ループごとにvalが宣言されて、その値として配列の要素が与えられます。
ループを無理やり分解すると、次のようになるイメージです。

java

1n = 0; 2val = tmp[n++]; 3ystem.out.println(val); 4val = tmp[n++]; 5ystem.out.println(val); 6val = tmp[n++]; 7ystem.out.println(val); 8//[以下省略]

:の左の変数に、:の右の配列の要素が格納されて、次の要素が格納されて・・・というループです。
最後の要素を参照した後に自動的にループを終了してくれます。

二次元配列ではこれを多重化しているだけです。javaにおける二次元配列は、一次元配列の中に一次元配列が入っている状態です。
なのでfor(一次元配列:二次元配列)と表記します。(配列の入っている配列から値(配列)を取り出す)

投稿2016/07/01 14:16

intelf___

総合スコア868

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

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

0

Iteratorインターフェースを持ったクラスをコンパイラが内部的に普通のfor文にしているようです。

J2SE 5.0 Tiger 虎の穴 拡張 for 文

配列の場合は、Iteratorインターフェースでは無いですが、コンパイラの方で判断しているみたいですね。

投稿2016/07/01 14:09

Mr_Roboto

総合スコア2208

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問