티스토리 뷰

Day 6. 배열


0225 오늘은 배열에 대해서 배웠습니다.

C나 C#등에서는 배열이 굉장히 중요하지만,

java에서는 컬렉션을 좀더 자주 쓴다고 하셨습니다.

어딜 가든, 중요한 문법이기 때문에 그래도 잘 알아두는게 좋겠습니다.


<참조 타입>

-JVM영역 : 설계도 영역(메소드 영역), stack영역 (변수 영역), heap영역(객체 영역)

(*null : 더 이상 객체를 참조하지 못하게 하는 값[객체 지향에서])

       : 변수의 초기값으로 사용하기도함. ex) int a = null;

--메소드 영역 : 설계도가 위치하는 영역

--힙 영역 : 객체,배열이 생성되는 영역

--스텍 영역 : 변수가 생성되는 영역


(* String은 나중에 다룸.)



<배열>

: 동일한 타입의 값을 여러개 저장하는 그릇.

  (배열의 크기는 수정이 불가능하다.)


*배열은 주소값을 가지고 저장이 됩니다.

위 그림을 보면, numbers라는 int형의 배열에 10, 14, 20 ,3 15를 저장한 것입니다.

5개의 원소를 저장하면서 자동으로 5칸의 배열이 생성되고, 그 칸들은 0부터 시작해서 5칸을 채우게 됩니다.

1번째인 10값의 자리는 numbers[0] 이 되는 것이죠.


--배열의 주소값의 이해


왼쪽 그림에서, a의 배열에 10, 30, 40, 100이 저장되어있습니다. 여기서 저장값들의 주소는 #123으로 a배열이 #123주소값을 참조하죠.

그 상태에서 b에 a와 같은 #123의 주소값이 주어지면 b역시 마찬가지로 10, 30, 40, 100을 참조하게 됩니다.


오른쪽 그림에서 b[0] 즉, b의 첫번째 값에 300을 넣고, a를 null값으로 주게 되면, a는 그 즉시 #123주소값과의 참조가 끊기게 됩니다.

b는 첫번째 값에 300을 넣었기때문에 300, 30, 40, 100을 갖게되죠.


->정수6개 그릇 만들고 싶을때   ㅇㅇㅇㅇㅇㅇ

>>>>>>>> int[] a = new int[6]; (선언)

int[] a = {1,7,4,3}; (선언 & 초기화)

    *처음자리부터 0번 1번 2번 3번으로 이름이 메겨진다.


->문자열5개 그릇 만들고 싶을때   ㅁㅁㅁㅁㅁ

>>>>>>>> String[] a = new String[5];

String[] a = {"길동","순신","유신"};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ArrayDemo1 {
    public static void main(String[] args) {
        
        int [] numbers = {101420315};
 
        //System.out.println(numbers[0]);
        //System.out.println(numbers[1]);
        //System.out.println(numbers[2]);
        //System.out.println(numbers[3]);
        //System.out.println(numbers[4]);
 
        //for (int x=0; x<=4; x++) {
        //    System.out.println(numbers[x]);
        //}
        
        //향상된 for문    : 배열과 콜렉션에서 자동으로 반복처리를 해줌.
        for (int a : numbers) {
            System.out.println(a);
        }
    }
}
cs

4행이 배열을 선언하고, 초기화하는 방법이다.

6~10행 처럼 저장된 배열들을 출력하는 방법도 있지만, 전 시간에 얘기했던 향상된 for문을 이용하면 배열을 쉽게 출력할 수 있다.

17행처럼 for문을 사용하면 numbers라는 배열을 크기만큼 a번째로 자동 반복시켜준다.



*메인함수의 String[] args에서 String[] 역시 배열임.

*여러개의 데이타를 하나의 단으로 관리하기 위한 목적.


*new키워드 : 객체를 생성하는 키워드.

     배열 객체생성, 설계도를 활용하여 객체 생성

(String은 자주 사용되서 생략.)


1. int[] a = {1, 10, 100, 3}; << 1,10,100,3이 들어있는 배열 a를 만든다.

2. int[] a = new int[5]; << 5개의 배열 a를 만든다.


*int, double형 등의 값의 배열을 선언하면 0이나 0.0이 초기값으로 담기고,

 String등의 객체를 배열 선언하면, null값이 초기값으로 담기게 된다.

(ArrayDemo2 참조)


* .키워드는 객체 참조 연산자 ex) System.~ : System객체안에 ~ 참조

* length는 배열의 길이(크기)를 알아낼 수 있다. ex( a.length: a객체의 길이)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] numbers = new int[3];
        double[] scores = new double[5];
        String[] names = new String[3];
 
        System.out.println(numbers[0]);    // 0
        System.out.println(scores[0]);    // 0.0
        System.out.println(names[0]);    // null
 
        // 배결의 길이를 조회한다.
        System.out.println(numbers.length);
        System.out.println(scores.length);
        System.out.println(names.length);
 
        // 배열에 값을 저장하기
        numbers[0= 100;
        numbers[1= 200;
        numbers[2= 150;
 
        names[0= "홍길동";
        names[1= "이순신";
        names[2= "강감찬";
        //names[3] = "김유신";    // 배열의 인덱스 범위를 초과, ArrayIndexOutOfBoungsException
 
        System.out.println(numbers[2]);
        System.out.println(names[1]);
        System.out.println(names[2]);
    }
}
cs




--다차원배열 (자바에서 거의 쓰이지 않음..)

: int[][], double[][][]...

ex) int[][]a = new int[2][3]  << 2행3열 배열

ex) int[][]b = new int[2][] << 2행n열 배열

    >> b[0] = new int[2];

       b[1] = new int[3];  << 열만 다르게 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ArrayDemo5 {
    public static void main(String[] args) {
        
        /*
        int[][] arr = new int[2][3];
        arr[0][0] = 20;
        arr[0][1] = 50;
        arr[0][2] = 60;
        arr[1][0] = 100;
        arr[1][1] = 90;
        arr[1][2] = 80;
        */
        int[][] arr = {{205060}, {1009080}};    // 위 주석과 같은 방법
 
        for (int x=0; x<2; x++) {
            for (int y=0; y<3; y++) {
                System.out.println(arr[x][y]);    
            }
        }
    }
}

cs

5~11행 처럼 하나하나 초기화할 수 있고, 13행처럼 초기화 하는 방법도 있다.

출력은 15,16행처럼 이중for문을 이용하면 된다.


코딩tip!

tip) p159관련

- String[] args 의 args의 역할 : 명령행인자를 담는 배열(?)...

c:\>javac ArrayDemo3.java << 컴파일

c:\>java copy c:\a.txt f:

c:\>java ArrayDemo3 홍길동 김유신 << 에서 홍길동, 김유신 등을 args가 담게됨.

1
2
3
4
5
6
7
8
9
10
11
public class ArrayDemo3 {
    public static void main(String[] args) {
        
        if (args.length == 2) {
        System.out.println(args[0]);
        System.out.println(args[1]);
        } else {
            System.out.println("명령행 인자의 갯수가 올바르지 않습니다.");
        }
    }
}
cs


tip) /* ~ */ :다중 행 주석, 기호안의 소스들은 전부 주석처리 된다.



for문을 이용한 프로그램 다운 프로그램을 만들어 보았다.

학생 수와 점수를 입력받아, 리스트를 출력하고, 최고점, 평균, 합계 등을 출력하는 프로그램이다.

해당 행 옆에 주석에 설명을 적어놓았으니, 참고 해주세요!!

(없으시겠지만, 이 소스를 보시고 질문이 있으신 분은 댓글 달아주세요,,,)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.Scanner;
 
public class ArrayDemo6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int studentNum = 0;        // 학생수
        int[] scores = null;    // 점수리스트
 
        for (;;) {
            System.out.println("------------------------------------------------------------");
            System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 0. 종료");
            System.out.println("------------------------------------------------------------");
            
            System.out.print("선택> ");
            int selectNo = scanner.nextInt();
 
            if (selectNo == 1) {                // 1. 학생수 입력하기
                System.out.print("학생 수> ");
                studentNum = scanner.nextInt();
                scores = new int[studentNum];    // 입력된 학생 수 만큼의 크기를 가지는 배열을 생성해서 scores에 그주소를 담는다.
            } else if (selectNo == 2) {            // 2. 학생 수만큼 학생들의 점수 입력
                System.out.print("점수 입력> ");
                for (int i=0; i<studentNum; i++) {        // 향상된 for문은 출력에 주로 사용, 배열 입력 받을때는 for문 사용하길.
                    System.out.print("학생"+ i +"의 점수> ");
                    int score = scanner.nextInt();        // score에 점수를 입력받아,
                    scores[i] = score;                    // scores[i]에 입력.
                }
            } else if (selectNo == 3) {                    // 3. 점수 리스트
                for (int x : scores) {
                    System.out.println("학생"+ x + "의점수> " + x);
                }
            } else if (selectNo == 4) {                // 4. 최고 점수, 총 합, 평균 점수 구하기
                int max = 0;
                int avg = 0;
                int total = 0;
 
                for (int x : scores) {        // 최고 점수 구하기
                    if (max < x) {
                        max = x;
                    }
                    total += x;                // 총 합 구하기
                }
                avg = total/studentNum;        // 평균 점수 구하기
 
                System.out.println("최고 점수 : " + max);
                System.out.println("총     합 : " + total);
                System.out.println("평균 점수 : " + avg);
            } else if (selectNo == 0) {                // 0. 종료
                System.out.println("프로그램을 종료합니다.");
                break;
            }
 
            System.out.println("\n\n\n");
        }
    }
}
cs



배열에 대해서 배워봤습니다.


--과제

구매상품리스트

상품명, 구매수량, 단가, 가격 을 상품별로 입력해서 출력

합계, 합 수량 합가격까지.


<출력 요구 사항>

제가 풀어본 위 과제 정답 소스는 첨부파일에 Hw0225라는 이름으로 저장해뒀습니다.

day6.zip


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함