3日目の続きです!!
【for each】
for each文は、配列やコレクションの要素をループしてくれるやつみたいです。
なにやらfor文よりもシンプルだとか、、、
【for eachの構成】
for(型 変数名 : 配列名){
}
※{}の中は実行内容
おおー!!
めっちゃシンプル!!
もう普通のfor文いらんやん!!
と思ってちょっと調べると、普通のfor文はfor文で、
(柔軟なループ処理が可能)
・カウントアップだけでなく、カウントダウンや、2つずつカウントアップなどができる
・ループ中に条件分岐を入れて処理をスキップしたり、途中でループを抜けることが可能
(インデックスを利用した処理に便利)
・配列やリストの要素に順番にアクセスする
・要素の値を更新できる
というメリットがありますね!!
それに対して、for each文のメリットは、
・コードがシンプルで読みやすい(インデックスの管理が不要)
・コレクションの要素を順番に処理することに特化しているので、ミスが少ない
とのことです!!
配列やリストの要素を順番に処理する場合は、for each文で、それ以外の場合はfor文みたいな感じで考えると良いみたいです!!
ちょっとTim先生の内容から飛んじゃいましたが、Tim先生の動画に戻ります!!
int[]arr = {1,5,7,3,4,5};
String[]names = new String[5];
for(int element : arr){
⇓
1,5,7,3,4,5
そして、要素だけでなくインデックスも入れたい時は、
int[]arr= {1,5,7,3,4,5};
String[]names = new String[5];
int count = 0;
for(int element : arr){
System.out.println(element + ” ” + count);
count++
⇓
1 0
5 1
7 2
3 3
4 4
5 5
右がインデックスですね!!
System~のところで”と”の間にスペースを入れることで、出力結果で要素とインデックスの間にスペースができたみたいです!!
さあ、次です!!
【配列にデータを入力する】
String[]names = new String[5];
for(int i = 0;i <names.length;i++){
↓
要素を追加する
↓
Scannerを使って新しい変数を取得したり、名前を取得したりする。
Scanner sc = new Scanner(System.in);
↓
Scannerは、ループごとに宣言するのではなく、
String[]names = new String[5];
Scanner sc = new Scanner(System.in);
for(int i = 0;i > names.length;i++){
System.out.print(” input: “);
String input = sc.nextLine();
names[i] = input;
}
for(String n :names){
System.out.println(n);
⇓
input:
と出て、入力していくと、、、
input: スグル
input: ビックボディ
input: マリポーサ
input: ゼブラ
input: フェニックス
スグル
ビックボディ
マリポーサ
ゼブラ
フェニックス
おおー!!
素晴らしい!!
激しい闘いが起こりそう!!
ただ、急にコードが増えた!!
ちょっと混乱しそうなので、自分なりにまとめてみよう!
(配列の宣言)
String[]names = new String[5];
文字列配列の宣言をする。その際に、配列の数を明記する。
(スキャナーの宣言)
Scanner sc = new Scanner(System.in);
スキャナー機能使いますよ!!
(forループの設定)
for(int i = 0;i > names.length;i++){
System.out.print(” input: “);
String input = sc.nextLine();
names[i] = input;
整数iは0で、1ずつ増えながら文字列配列をループします。
そして、コンソール画面に「input: 」と表示させてください。
(ここで、いきなりSystem.out.の後が「print」となったことに戸惑いを隠せませんでした、、
「ln」は改行して表示、「print」は、横に表示みたいな感じでした!!)
文字列inputは、ユーザーが入力した文字列です。
5つの文字列の配列であるnamesのカウント(int i)は、ユーザーが入力した文字列(input)です。
最後のnames[i] = inputがほんまに分からんかった、、、
なんで[]に”i”が入るのか、、、
なんで文字列の話をしてるのに急にintのi が出てきたのか、、、
この時、悩みすぎて白目になった記憶があります。
その時は、結局、スルーをして進んだのですが、今(2月11日)考えてみると上に書いたような解釈でいいのかなって思ってます。
(違ったらすみません)
(for eachの設定)
for(String n :names){
System.out.println(n);
文字列nは、5つの文字列配列であるnamesをループします。
ループして取得した5つの文字列を表示させてください。
【ループから抜け出す方法】
<break>
breakを入れることで、そこに辿り着いたらループから抜け出してくれるとのこと。
(例)
名前のリストを読んでいる時に「ケンダマン」という言葉に出会ったらプリントをやめる
String[]names = new String[5];
Scanner sc = new Scanner(System.in);
for(int i = 0;i < names.Length;i++){
System.out.print(” Input: “)
String input = sc.nextLine();
names[i] = input;
for(String n : names){
System.out.println(n);
if(n.equals(“ケンダマン”){
break;
}
⇓
input: サンシャイン
input: ペンタゴン
input: ケンダマン
input: マンモスマン
input: カニベース
サンシャイン
ペンタゴン
ケンダマン
ちゃんとケンダマン以降はプリントされないことが確認できました!!
そんなこんなで、3日目が終わりました!!
このfor / for eachは、なんか使用頻度が多そうなので、しっかり復習して使いこなせるようになります!!!