‫わかりました｡
‫さて､ 配列と2次元配列､ そしてfor eachループの使い方がわかったところで､
‫これらの概念を1つのビデオと1つの例で組み合わせてみましょう｡
‫このビデオでは､ これらのさまざまな機能について説明した後､ ネストされたforループをどのような場合に使用するか､
‫また､ 例えば多次元配列の場合､ for eachループに対するネストされたforループの利点は何かについて説明します｡
‫では､ さっそく始めましょう｡
‫まず､ ご覧のように行列があります｡ これは2次元の配列で､
‫各次元に3つの項目があり､ いわば3行3列の配列です｡
‫そこで､ ここでfor eachキーワードを使ってfor eachループを使うことにします｡ この1つとタブです｡
‫これによって､ 基本的に､ どのようなタイプであるか､ 反復処理するコレクションのアイテムをどのように呼び出すか､
‫そしてコレクション名を素早く入力することができます｡
‫だから､ コーディングが速くなりたいなら､ これはちょっとしたコツなんだ｡
‫つまり､ item は整数型になります｡ なぜなら､ この行列には整数の束が入っており､ item
‫と呼ぶこともできますし､ 数字なので num と呼ぶこともできますし､ element と呼ぶこともできます｡
‫これは､ ここで見るような普通の名前になるのですが､ とりあえず項目は大丈夫そうです｡
‫そして､ 繰り返し処理するコレクションは､ ここで準備した行列になります｡
‫また､ この行列を静的にする必要があるのは､ 静的なメインメソッドの中で使うからです｡
‫また､ 静的なmainメソッドの内部や一般的に静的なメソッドの内部では､ 非静的なアイテムや変数を使用することはできません｡
‫このfor eachループを繰り返し､ 行列の項目を表示するには､ ここでconsole right
‫lineステートメントを使用すればよいのです｡
‫ダブルタブで､ ここではアイテムを表示すると言って､ 空白のスペースを作ってください｡
‫あるいは､ 何もない空間を作り､ 実は赤い線は使わずに､ 右のようにしましょう｡
‫だから､ これは1行に書くだけで､ 常に新しい行を作らない｡
‫では､ 早速実行してみましょう｡
‫そして､ 1､ 2､ 3､ 4､ 5､ 6､ 7､ 8､ 9と見ていくことになる｡
‫つまり､ このマトリックスにあるすべての項目が表示されているわけです｡
‫つまり､ このfor eachループを使って､ このマトリックスの中のすべての項目を調べているわけです｡
‫なるほど｡
‫だから､ for eachループは強力なツールなのです｡
‫コレクションと2Dマトリックス､ 3Dマトリックス､ いくつの次元があってもいいのですが､ それを通過させることができます｡
‫ここでは配列を使っていますが､ 配列はコレクションの一種であり､ for eachループが反復処理するために必要なものです｡
‫つまり､ コレクション・マトリックスを繰り返し処理するわけです｡
‫それでは､ ネストされたforループを使って､ どのように実現できるかを紹介します｡
‫つまり､ for eachループは､ その中の項目を一つ一つ見ていくだけなら超便利なのですが､
‫ある種の場面ではデメリットもあるのです｡
‫そのため､ 今､ アイテムを変更したい場合でも､ プロテクトされているため変更することはできません｡
‫ですから､ 例えば､ itemを今すぐ3つで上書きしてください､ とは言えません｡
‫こちらもご覧の通り｡
‫そこで､ これを試すと､ for each iteration変数であるため､ itemに割り当てられないと表示されます｡
‫つまり､ 現物ではなく､ 本当にいわば価値の保存なんです｡
‫つまり､ 現在見ている値が何であれ､ コレクションから､ その値をここに保存しているのです｡
‫だから､ 最初のイテレーションでは､ 1つなんです｡
‫2回目の繰り返しでは2つになっていますが､ 実際には決して値そのものではなく､ 値への参照に過ぎないのです｡
‫だから､ これでは本当に困るのです｡
‫そのため､ 実際に調整しようとすると､ ネストされたforループのようなものが必要になります｡
‫では､ ここで､ 次のforループを作ってみましょう｡
‫ここで､ ネストされたforループを使用して配列を印刷していることを示す､ 小さな明るい線のステートメントを追加するつもりです｡
‫では､ ネストされたforループとは何でしょうか？
‫まあ､ 基本的にはforループの中に別のforループがあるようなものなんですけどね｡
‫なるほど｡
‫ここでは4つで､ またダブルタップを使うことができるわけです｡
‫だから､ Iゼロから長さまで行くんです｡
‫そこで､ ここでは反復の長さを入力する必要があります｡
‫ここでは行列を使用しますが､ もちろんここで長さを使用することもでき､ そうすれば行列全体の長さを得ることができます｡
‫つまり､ 基本的にはこの行列の中にあるアイテムの数なのですが､ 私が欲しいのはこれではありません｡
‫各ディメンジョンを調べたいので､ 行ごとに､ 列ごとに調べたいのです｡
‫つまり､ 最初の次元は行になります｡
‫だから､ arraysが提供するメソッドを使うことができる｡
‫そこで､ 配列クラスには長さを取得するメソッドがあり､ 次元を渡す必要があるのです｡
‫これは､ 指定された次元の配列の要素数を表す数値です｡
‫つまり､ 私の場合､ 0を入力すると､ 0次元､ つまり基本的には行を返すことになります｡
‫これで列ができるわけです｡
‫個々の列を繰り返し処理する場合は､ ここで別のforループを使用する必要があります｡
‫これは私の内側のforループになります｡
‫そして､ この外側の1枚｡
‫これは外側のforループになります｡
‫なるほど｡
‫だから
‫ここで変更する必要があるのは､ 当然ながら反復変数名である｡
‫そこで､ ここではIの代わりにJを使うことにします｡
‫それは当たり前のことなんです｡
‫そのため､ 内側のforループがある場合､ 通常はここでJを使い､ 変数名をカウンターで指定します｡
‫しかし､ ここで比較したいのは､ Jと1次元の長さではなく､ 2次元の長さである｡
‫そこで､ ここに1つ入力します｡
‫これで一つ一つの列に目を通すことができるようになるわけです｡
‫つまり､ このfor loopの仕事は個々の列を通過させ､ このfor loopの仕事は個々の行を通過させることになります｡
‫ということは､ もう先に進んでいいということですね｡
‫そして､ 私たちの正しい声明をここで発表してください｡
‫しかし､ そうなると､ 当然ながらここにはアイテムがない｡
‫では､ 何があるのか？
‫さて､ ここで作成した静的変数であるマトリックスがあります｡
‫しかし､ この行列は､ どの項目を表示すべきかを知る必要があります｡
‫だから､ Fを表示するという意味のdisplay I jだけと言うことにしています｡
‫Jで列をなす｡ F. の列で､ 基本的に最初の反復では､ このIは0になることを意味します｡
‫そして､ このforループから始めて､ この4つのループはそれが終わるまで､ 外側のforループの次の繰り返しにしか行きません｡
‫だから､ そのときだけ､ 私は1つインクリメントされるのです｡
‫つまり､ このforループを一周するまで､ Iはゼロのままです｡ つまり､ Iはゼロから始まり､
‫最初の反復でJがゼロになります｡
‫つまり､ 最初のエントリを取得した後､ Jを1にしています｡ これは､ この行を実行したときにインクリメントして､
‫1つずつ増やしていったからです｡
‫だから今Jは1になって､ ゼロイチと言うんです｡
‫つまり､ 行列の0番目の位置はこの2､ 次にJが2､ そしてこの3ということになります｡
‫そして､ チェックは
‫2+1､ つまり､ 反復の後にインクリメントされるjは､ 現在見ている次元の長さより3つ少ないということです｡
‫そして､ ディメンジョンはカラムディメンジョンになります｡
‫では､ 何列目になるのでしょうか？
‫そして今回は､ 3つのカラムを用意しました｡
‫だから､ 3は3より少ないということはなく､ このフォローはその実行で行われることになる｡
‫そして､ 再び外側のforループに入ります｡
‫そこで今回は､ 増分値iを増やします｡
‫一人で､ つまり､ これから一人になる｡
‫そして､ このforループをまた3回繰り返す｡
‫つまり､ この内側のforループの最初の繰り返しで､ Iが1､ Jが0になるわけです｡
‫そして､ 1つになり､ 2つになる｡
‫つまり､ 基本的にこの項目､ この項目､ この項目の順に進み､ その都度コンソールに書き込んで空欄にするのです｡
‫そして､ 3回目のforループの繰り返し､ またはループの外では､ いわば最後の行を通過します｡
‫つまり､ ここがネストされたforです｡
‫ループです｡
‫なるほど｡
‫では､ 実際に私が言っているようなことができるのかどうか､ 簡単に実行してみましょう｡
‫そして､ こちらをご覧ください｡
‫まあ､ ちょっと違う刷り方をしたほうがいいかもしれませんね｡
‫これです｡
‫もう一回改行します｡
‫ようなものです｡
‫では､ もう一度やってみましょう｡
‫さて､ これがネストされたforループを使って出力された2次元配列です｡
‫こちらはこちらで｡
‫こちらはfor eachループでした｡
‫さて､ この時点で､ あなたはこう言うかもしれません｡ 「デニス､ 何のメリットがあるんだ？
‫これって､ 意味があるんでしょうか？
‫そこでやっていることが気に食わない｡
‫私は､ for eachループを使う方が好きです｡
‫ほら､ 超シンプルで､ 必要なコードもごくわずかです｡
‫今見ている商品に直接アクセスできるのがいいところですね｡
‫だからここでは､ それを繰り返しているだけなのです｡
‫しかし､ 先に進んで新しい値を代入するとしたらどうでしょう｡
‫仮に0を割り当てたとしよう｡
‫今､ これを実行すると､ ゼロの束ができるわけです｡
‫ほら､ 〇〇〇〇が見えるでしょ？
‫そのため､ 例えば値を上書きするようなロジックを作ることができますが､ これはfor each loopではなかなか実現できません｡
‫For each loopは超最高です｡
‫何かを表示して､ 一つ一つの項目に対して何らかのコードを実行するだけで､ 特に項目自体を変更するわけではありません｡
‫項目は､ 私たちが内部に持つどんな値に対しても､ 短期的に保存する場所に過ぎないからです｡
‫見ているコレクションは､ ネストされたループのために異なっており､ それはすでにここで見る1つの利点です｡
‫しかし､ それ以外にも利点はあります｡
‫これから､ ネストされたforループの例をいくつか見ていきますが､ ここでは､ この特定の例について説明します｡
‫次のビデオでは､ これを少し調整します｡ たとえば､ forループから偶数または奇数の数字を取得する方法と､
‫たとえば斜めの要素だけを印刷するように調整する方法をご覧いただきます｡
‫なぜなら､ これでforループやネストされたfor､ loop forが使えるということが大体わかるからです｡
‫そして､ 基本的にプログラミングには多くの自由がありますから､ 私は皆さんにもっと使えるツールを提供したかったのです｡
‫では､ 次のビデオでそれを見てみましょう｡