本日の学習

【学習内容】

〇Progate

Java学習レッスンⅡ

13~15:配列と繰り返し、拡張for文

 

理解度:80

 

 

【疑問点】

①lengthの使い方
→構文:配列変数名.lenght

for(int i = 0; i<names.length; i++ ){// iはインデックス番号の変数のイメージ
 System.out.println("私の名前は" + names[i] + "です") ;
 }

→なんでnames[i]なのか、namesは?→要素を取り出すときにインデックス番号が必要で、これじゃ何番目の箱の要素をとるのか分からないから
 
👉iがインデックス番号の変数だと分かる理由
  i < names.length と書かれているから、iがインデックス番号の変数として認識される。
  iをインデックス番号の変数って認識するのはi < names.length の部分だけど、先にiの宣言をしないといけないから、宣言→条件式の順番になる


②拡張for文の処理

 String names = {"にんじゃわんこ", "ひつじ仙人", "ベイビーわんこ"};→配列の変数

 for(String name :names){
         System.out.println("私の名前は"+ name +"です");→変数(name)自体に要素を1つずつ代入してるのでインデックス番号の概念は消える
    }

✅「配列namesから、1つずつ要素を取り出して、それをnameという変数に入れる」

普通のfor文ではインデックス番号を用いて配列の要素を取得しなければなりませんが、
拡張for文では変数に配列の要素自体が代入されます


【苦手】

①for文 構文
for (初期化; 条件式; 更新処理) {
    // 繰り返し実行したい処理
}

 for(int i = 0; i<names.length; i++ ){ →iはまだ上に登場していない変数なのでデータ型をつける。条件式:配列全部をとるのでiが配列全部に行くまで
      System.out.println("私の名前は" + names[i] + "です") ;
    }

②拡張for文

for (データ型 変数名 : 配列またはコレクション) {
    // 繰り返し処理
}

| 通常のfor文                   | 拡張for文                     
| ----------------------------- | --------------------------- |
| `for (int i = 0; i < ~; i++)` | `for (String name : names)` |
| 要素の取り出しは `names[i]`   要素の取り出しは `name`(直接)         
| インデックス番号が必要      | インデックス番号は使わない           
| 要素の位置を操作できる       位置は意識せず全部処理                 

 

本日の学習

【学習内容】

〇Progate

Java学習レッスンⅡ

10~12:break、continue、配列、要素の上書き

 


理解度:89

 


【疑問点】

① if文とfor文の違い

②breakとcontinueの違い

int i = 1;
    while (i < 10) {
      // iが5の倍数のとき、繰り返し処理を終了してください
      if(i %5 == 0){
        break;→処理の中断、強制終了のイメージ(iが9になるまでループされるが、iが5の倍数になった時点で以降の処理は終了)
      }
        System.out.println(i);
          i++;
     }

for (int j = 1; j < 10; j++) {
      // jが3の倍数のとき、処理をスキップしてください
      if (j % 3  == 0){
        continue;→「現在の繰り返し処理」をスキップして、次の繰り返しに進む
      }
      
      System.out.println(j);
    }

処理の流れ

j = 1

1 % 3 != 0なので、スキップせず、出力される。
→ 1が出力される。

j = 2

2 % 3 != 0なので、スキップせず、出力される。
→ 2が出力される。

j = 3

3 % 3 == 0なので、continueが発動。
→ この回はスキップされ、System.out.println(3) は実行されない。

j = 4

4 % 3 != 0なので、スキップせず、出力される。
→ 4が出力される。

j = 5

5 % 3 != 0なので、スキップせず、出力される。
→ 5が出力される。

j = 6

6 % 3 == 0なので、continueが発動。
→ この回はスキップされ、System.out.println(6) は実行されない。

j = 7

7 % 3 != 0なので、スキップせず、出力される。
→ 7が出力される。s

j = 8

8 % 3 != 0なので、スキップせず、出力される。
→ 8が出力される。

j = 9

9 % 3 == 0なので、continueが発動。
→ この回もスキップされ、System.out.println(9) は実行されない。

😊まとめ

fは~のとき
forは条件なしで繰り返したいとき
breakは処理を中断したいとき
continueは処理をスキップしてもまた続きからしたいとき

 


【苦手】

① if文とfor文の違い

✅ if文(条件分岐)
役割:条件に応じて「処理を実行するかどうか」を決める。

使う場面:「○○だったら〜する」というように、状況に応じた処理をしたいとき。

🔁 for文(繰り返し)
役割:ある処理を決まった回数だけ繰り返す。

使う場面:何回も同じような処理をしたいとき(例:1〜10まで表示するなど)。

②配列の宣言と要素を同時に書くとき

String names ={"にんじゃわんこ", "ひつじ仙人", "ベイビーわんこ"};→〇
String
 = names {"にんじゃわんこ", "ひつじ仙人", "ベイビーわんこ"};→× 構文:型[]配列名={要素};

言葉の定義

③配列の「要素」「インデックス番号」の言葉の定義

要素:実際のデータ
インデックス番号:配列の箱の位置

④配列の要素の上書き

例: languages[1] = "Java";

 

本日の学習

【学習内容】

〇Progate

Java学習レッスンⅡ

8~9:while文

 


理解度:95

 


【疑問点】

 ① int number = 10;
    
    // while文を用いて、numberが0より大きい場合に繰り返す、繰り返し処理を作ってください
    while (number > 0 ) {
     System.out.println(number);
     -- number;
    }

while文は条件式は一つだけ?→〇
後置インクリメントにしてもコンパイルした結果が変わらないのは?→先に出力されてその後にインクリメントされるから。


 ②// for文を用いて、繰り返し処理をつくってください
     for ( int i = 1 : i >= 10 : i ++){
       System.out.println( i + "回目のループです");

      }

→8個数コンパイルエラー(8errors)になった…(笑)

原因:条件式の区切り :× ;○
for (初期化; 条件; 更新) {
    // 繰り返したい処理
}


【苦手】

① // for文を用いて、繰り返し処理をつくってください
    for ( int i = 1 : i >= 10 : i ++){
      System.out.println( i + "回目のループです");
  }

条件式の3つ目(更新式)はループの最後(}に来たら)に実行される。

 

本日の学習

2025.05.11

【学習内容】

〇Progate

Java学習レッスンⅠ

1~5:System.out.println、文字列、数値、文字列の連結

 

理解度:95

 

【疑問点】

System.out.println("38"+"19")だとコンパイルに成功して出力できる、

System.out.println("38+19");だとコンパイルエラーになる理由。

             正: コンパイルできるが38+19と出力される

 

// "38"と"19"を連結して出力してください
    System.out.println("38"+"19");→〇

  System.out.println("38+19");→×

 

仮説:数字ごとに””がないと文字列としてみなされないのか?

           ”38+19” だと出力するときに文字列とみなされるが、

           +が出力されてしまうから。

→おおむね〇

 

結果:"38+19"ただの文字列です。

    中に + が含まれているだけで、Javaにとっては関係ありません。

    38と19をそれぞれ文字列として出力したいため、+を””で含めてはいけない。

 

【苦手】

余りの数がでる割り算

// 8を3で割った時の余りを出力してください
    System.out.println(8%3);

 

【学習内容】
〇Progate
 
Java学習レッスンⅠ
 
 6~12:変数の定義、更新、自己代入、小数
13~14:自動変換(暗黙の型変換)、強制変換(キャスト)
15  :1~14の総合課題
 
理解度:99
 
Java学習レッスンⅡ
 
1~7:真偽値、比較演算子、論理演算子、if文、else if文、switch文
 
理解度:94
 
 
 
 
【疑問点】
 
 ① int length = 6;
    int height = 8;
    
    // 変数rectangleAreaに、四角形の面積を代入してください
     rectangleArea = length * height; 
→ rectangleArea の前にintをつけなければいけないのか
    
    // 変数rectangleAreaを出力してください
    System.out.println(rectangleArea);
    
    // 変数triangleAreaに、三角形の面積を代入してください
      triangleArea = length * height /2 →/2でないといけないのか
    
    // 変数triangleAreaを出力してください
    System.out.println(triangleArea);
 → triangleAreaの前にintをつけなければいけないのか
 
仮説:初めて出現する変数名には型を指定する必要があるから
結果:〇
 
仮説:三角形の面積を出すときは底辺*高さ*1/2はJavaでは扱えないから
結果:int型で変数が指定されているため1/2は0.5だから、小数点以下が切り捨てられて0になるため。
   計算しても0をかけてるから答えが0になる。
 
②データ型の自動変換
 同じ型同士でなければ足せない。違う型同士を足すときにJavaに備わっている自動変換で足すことができることまで分かった。
 しかし、何を基準にで自動変換されるのか分からない。
 
→自動変換(暗黙の型変換ともいう)は、小さい型→大きい型に変換される
byte → short → int → long → float → double
   ☆char型はint型に変換される
 
③比較演算子を変数に代入する
  boolean bool = 3*9 == 27; →〇
 
 boolean bool;
  boolean bool = 3*9;
  boolean bool = 27;
 Systemout.println (bool= 3*9 == 27); →×?
 
④論理演算子
ひとつだけ&、|を使うときと、&&||のときがあった気がする。これの違いは?
!(~でない)は「!=」で表した気がする…!だけでいいの? 
 
// falseと出力されるようにしてください
    System.out.println(false && true); →||でいいのでは?片方が条件を満たしているとき左側が採用されるのでは?
 
& アンド :両方の式を必ず評価する
 
&& アンドアンド :左がfalseなら右は評価しない(短絡評価(ショートサーキット):左だけ評価)
 
| オア :両方の式を必ず評価する
 
||オアオア  :左がtrueなら右は評価しない
 
 
 
// 「8 < 5」でない、の結果を出力してください
    System.out.println(! (8 < 5)); 
 
→なんで! (8 < 5)なの?
 
! は1つの式全体に対してかかるから(分配法則のイメージ)
    
!  :~でない
!= :~と等しくない
 
⑤switch文のbreak
// switch文を用いて、変数nの値に応じて条件分岐をしてください
    switch (n){
      case 1:
        System.out.println("大吉です");
        break;
      
      case 2:
        System.out.println("吉です");→条件分岐の最後だからbreakいらないのでは?
    }
→今回はケースの最後で条件分岐が終わるが、下に(他のcaseno処理に)処理が流れて
 しまうため、breakは書くのが基本。
 
【苦手】
 
①自己代入の省略
 
  // 変数numberに7をかけて、変数numberを上書きしてください
    number *= 7;
 
②型の自動変換
「+」などの操作は同じデータ型同士でないとできない。よって型の違うものを演算するときは、型を変換し同じ型にしてあげる。
 
Javaではこの型変換の方法として、自動の変換と手動の変換がある。
 
 String型とint型を足すと、int型が自動でString型に変換され、文字列の結合が行われる。
 
③強制変換(キャストとも呼ぶ)
 int型同士の計算「5 / 2」は2になってしまうため、正確なこと答え2.5が出せない。
 int型の変数同士の割り算で、正確な値を出したいときはどうすればよいか?
 
→強制的に型変換を行う。構文:(変換したい型)値
 例: System.out.println((double)number1/number2);
 
④比較演算子を変数に代入する
 // 変数を定義し、値を比較した結果を代入してください
    boolean bool = 3*9 == 27;
 
⑤論理演算子
かつ&&
または||
「~でない !」と「~と等しくない =!」の違い
 
⑥else if 
 条件式書き忘れ
 
⑦条件分岐:switch文
 条件の値がcaseの値と一致するとき、処理が実行される。
 
switch(条件の値){
 case 値1:
 break;
}
 
どのcaseとも一致しなかったときに実行する処理を、defaultに指定することができる。(elseに類似)
※defalultが最後にあってもbreakは必要。→将来、処理が増えるかもしれないから。
 処理が統一されて見やすいから。