第四章.整列


アレイとは
▶同じタイプの複数のデータを順番に格納するデータ構造
配列を使用する理由:変数を使用してプログラムを使用するため、多くの変数を使用する場合があります.変数の使用を容易にするために、配列を使用します.
package com.company;

public class note {
    public static void main(String[] args) {
        int math = 20;
        int korean = 30;
        int science = 40;
        int english = 50;
        int society = 80;
        //총점
        int sum = math + korean + science + society + english;
        //평균
        int average = sum / 5;

        System.out.println("합계 : " + sum);
        System.out.println("평균 : " + average);
    }
}
一般に、このように変数を1つずつ指定してコードを記述する場合、上記の場合、科目の追加を継続すると、コードの変更の不便が必要となる.
配列に変換すると
public class note {
    public static void main(String[] args) {

        int[] scores = {20, 30, 40, 50, 80}; //과목 순서를 알고 있다는 가정하에
//        int sum = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];

        int sum = 0;
        for (int i = 0; i < scores; i++) {
            sum = sum + scores[i];
        } 
          // 이런식으로 코드를 짜게 되면 언제든지 과목추가를 편하게 할 수 있다. 
          //--> 수정하기에 편하다(유지보수, 생산성이 upgrade)
          // 이래서 배열을 사용하면 편하다.
        int avg = sum / scores.length;
        // 이때 scores의 변수가 5개 이므로 scores.length대신해서 5를 사용해주어도 
        // 되지만 그러면 변수를 늘이거나 줄어들 때 마다 변수의 개수에 대한 값을 그때마다
        // 변경 해주어야 하기 때문에 scores.length로 코드를 작성해주는것이 편리하다.

        System.out.println("합계 : " + sum);
        System.out.println("평균 : " + avg);

    }
}
上のコードでは
 int sum = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];
このように使うのは問題ありませんが、配列を使うのは意味がありません.
--> why? 後で修正するのはちょっと不便です.
▶配列は、関連する情報を1つのグループとして管理するために使用され、これらの情報を扱う際に主に重複文を使用します.ここから,複文は配列と非常に密接な関係があることがわかる.
例外とは?
int[]names=new int[3]では、names[3]=10;このように値を与えると例外が発生します.(0~2以外)

上の図に示すように、実行ファイルにはNullPointerExceptionの例外処理が表示されます.
QUIZ)a[0]の出力値は何ですか?
int[] a = {1, 2, 3};
        int[] b;
        b = a;
        b[0] = 100;
        System.out.println(a[0]);
Answer) 100
変数bは、変数aと同じアドレスを参照する.
aという名前の記憶空間にそれぞれ1(アドレス1)、2(アドレス2)、3(アドレス3)を含み、bという名前の記憶空間にaを入れる.aの起点はアドレス1号、bはaのアドレス1号(ポインタ役割)である
b[0]を100に指定して折りたたむと、a[0]も100になります.(同じアドレスを表示しているため)
c言語におけるポインタの概念はjavaで一般的に使用されていることがわかります.
変数のアドレスは変更されませんが、変数が指すアドレスは変更できます.
Garbage Collectionとは?
int[] score1 = {20,30,40,50,60};
int[] score2 = {50,60,70,80,90};

score1 = score2;

score1 = null; // 바라보고 있던 주소가 날라가게 된다.
ここでscore 1とscore 2は、score 1=score 2が作成されるため、異なるアドレスを表示しています.
score 2の前に見たアドレス値{50,60,70,80,90}は意味のない値になる.