2
0

More than 1 year has passed since last update.

Java Silver SE11 4章

Last updated at Posted at 2022-01-15

Java Silver SE11 4章

黒本をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。

while文

繰り返し処理に使用される構文。
条件式がtrueの間は処理を繰り返す。
中カッコ{}を省略した場合、次の1行が繰り返し処理の対象になる。

while
public class Main {

    public static void main(String[] args) {

        int num = 0;
        while (num < 5) {
            System.out.println("num = " + num);
            num++;
            System.out.println("num++ の結果は " + num);
        }
    }
}
結果
num = 0
num++ の結果 1
num = 1
num++ の結果 2
num = 2
num++ の結果 3
num = 3
num++ の結果 4
num = 4
num++ の結果 5

do-while文

while文と違い、先に処理があるので必ず1回は実行される。
中カッコ{}を省略した場合、doとwhielの間には1文のみ記述でき、2文以上はコンパイルエラーになる。

do-while
public class Do_while {

    public static void main(String[] args) {

        int num = 0;
        do {
            //出力した後に num = num + 1 が処理される
            System.out.println("num = " + num++);
            System.out.println("num++ の結果は " + num);
        } while (num < 5);
    }
}
結果
num = 0
num++ の結果は 1
num = 1
num++ の結果は 2
num = 2
num++ の結果は 3
num = 3
num++ の結果は 4
num = 4
num++ の結果は 5

for文

指定した回数だけ処理を繰り返す時に、よく使われる。
初期化文、条件文、処理内容、更新文を用いる。

for
public class For {

    public static void main(String[] args) {

        // 順番
        // 1.初期化文 int i = 0, j = 2;
        // 2.条件分   i < 5;
        //   falseなら終了
        // 3.繰り返し処理 System.out.println(i*j);
        // 4.更新文   i++
        // 2.に戻る
        for (int i = 0, j = 2; i < 5; i++) {
            System.out.println(i*j);
        }
}
結果
0
2
4
6
8

よくある間違い

  • 初期化文 変数の宣言
    • 複数の変数を宣言するときは、同じ型にする必要がある
    • 初期化で宣言した変数は、for文外で使用することはできず、コンパイルエラーになる
  • 条件文
    • カンマ「,」を使い複数条件を記述できない
    • 理論演算子を使い複数条件の判定はできる
    • 省略できる(無限ループになる)
  • 更新文
    • 省略できる
for_エラー
public class For {

    public static void main(String[] args) {

        // コンパイルエラー 変数の初期化部分を同じ型にする必要がある
        for (int i = 0, long j = 2; i < 5; i++) {
            System.out.println(i*j);
        }

        // コンパイルエラー scope外(for文外)で変数totalを使用している
        int a = 0;
        for (int b = 2, total = 0; b < 5; b++) {
            total = a*b;
        }
        System.out.println(total);

        // コンパイルエラー カンマによる複数条件は記述できない
        // i < 3 && j < 5 なら可能
        for (int i = 0, j = 2; i < 3, j < 5; i++) {
            System.out.println(i++);
            j += i;
        }
    }
}

拡張for文

for文から派生し簡単に記述できるようになっていて、
配列やコレクションの全要素に対して、処理を実行する。
(一時変数の宣言 : 配列orコレクション) を用いる。

拡張for
    public static void main(String[] args) {
        String [][] array = {{"A", "B", "C"},{"D", "E"}};
        for (Object obj : array) {
            System.out.println(obj);
            // [Ljava.lang.String;@1dbd16a6
            // [Ljava.lang.String;@7ad041f3
        }

        int[] array1 = {1, 2, 3};
        int total = 0;
        for (int i : array1) {
            System.out.println(i); // 1 2 3 を順番に表示
            total += i;
        }
        System.out.println(total); // 6

        // 一時変数のstrに"D"を代入している
        // strの参照先は変更されるが、要素は"D"に変化しない
        // 一時変数str の参照先は "A"
        // そこから "D" に変更される
        // つまり array2[0] の参照先 "A"は変更されていない
        String[]array2 = {"A", "B", "C"};
        for (String str : array2) {
            str = "D";
        }
        for (String str : array2) {
            System.out.print(str); // ABC
        }
    }

break

while文やfor文でbreakを記述することで、繰り返し処理を中断できる。
直近のループのみが中断されるため、スコープ外のループは処理される。

break
public class Break {

    public static void main(String[] args) {
        int num = 0;
        while (true) {
            if (num == 2){
                break;
            }
            System.out.println(num); // 0 1
            num++;
        }
    }
}

continue

breakが繰り返し処理を中断し、ループから抜けるのに対して、
continueは繰り返し処理をスキップする。

continue
public class Continue {

    public static void main(String[] args) {
        int [] array = {1, 2, 3};
        int total = 0;
        for (int i : array) {
            if (i % 2 == 0) {
                continue;
            }
            total += i;
        }
        System.out.println(total); // 4
    }

}

2次元配列

配列要素が平面的に並ぶイメージ。
(個人的には数学で学んだ、x軸とy軸のような感じ)

2次元配列
public class For_array {

    public static void main(String[] args) {

        int array [][] = new int[][] {{1,2}, {2, 3, 4}};
        int total = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = i; j < array[i].length; j++ ) {
                total += array[i][j];
            }
        }
        System.out.println(total); // 10

        // 配列要素数が異なる2次元配列
        int array2 [][] = new int[][] {{1,2}, {2, 3, 4}};
        System.out.println(array2.length);      // 2
        System.out.println(array2[0].length);   // 2
        System.out.println(array2[1].length);   // 3
        System.out.println(array2[1][2]);       // 4

        // イメージは縦が長い長方形
        int[][] num = new int[100][3];
        System.out.println(num.length);      // 100
        System.out.println(num[0].length);   // 3
        System.out.println(num[99].length);  // 3
    }
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0