티스토리 뷰
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 = {10, 14, 20, 3, 15}; //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 = {{20, 50, 60}, {100, 90, 80}}; // 위 주석과 같은 방법 for (int x=0; x<2; x++) { for (int y=0; y<3; y++) { System.out.println(arr[x][y]); } } } } |
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라는 이름으로 저장해뒀습니다.
'Programming > JAVA' 카테고리의 다른 글
JAVA Web#8 Day 8 메소드 (0) | 2019.03.04 |
---|---|
JAVA Web#7 Day 7 자바의 클래스 (0) | 2019.03.03 |
JAVA Web#5 Day 5 반복문 (0) | 2019.02.25 |
JAVA Web#4 Day 4 자바의 연산자2 & 조건문 (0) | 2019.02.21 |
JAVA Web#3 Day 3 자바의 형 변환 & 연산자 (0) | 2019.02.20 |
- Total
- Today
- Yesterday
- querybox
- 자바 국비
- copotter
- Database
- 강제형변환
- html
- block element
- 프레임워크
- sql
- 오라클 문법
- spring
- inline element
- jhta
- 데이터베이스
- 이클립스
- Class
- Oracle
- 자바 독학
- 중앙HTA
- 블록엘리먼트
- API
- 인라인엘리먼트
- 자바 기초
- 브라캣
- 태그
- 비등가조인
- h#
- 국비
- 자바
- 스프링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |