학습목표
배열을 이해하고 프로그램에 적용할 수 있다.
배열을 활용하여 프로그래밍을 할 수 있다.
다차원 배열을 이해하고 프로그래밍에 적용할 수 있다.
배열(array)
- 동일한 자료형 여러 개를 묶어서 처리하는 자료구조
- 변수 이름과 인덱스(index)를 이용하여 데이터를 표현
배열이 필요한 이유?
동일한 자료형 여러 개를 선언하는 경우 변수가 여러 개 필요
-> 배열을 이용하면 하나의 변수만 필요하여 효율적인 프로그래밍 가능
int[] a = {1, 2, 3, 4, 5}; // 1개의 변수
배열 선언 방법
배열 선언 시 배열 요소의 개수는 지정하지 않음
- 자료형[ ] 배열이름; ex. int[ ] a;
- 자료형 배열이름[ ]; ex. int a[ ];
배열 생성 방법
- 배열 생성 = 메모리 할당 작업
- new 연산자로 배열에 메모리를 할당하면 배열이 생성됨
- 배열 생성 시 배열 요소의 개수를 지정함
- 자료형[ ] 배열이름 = new 자료형[베열 요소의 개수];
int[ ] a = new int[5];
배열 초기화
(1) 배열 선언 및 생성 후 배열 요소의 값들을 지정하는 방법
int[] a = new int [5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
배열 인덱스는 0부터 시작
(2) 배열 선언과 동시에 배열 요소의 값들을 지정하는 방법
int[] a = new int[] {1, 2, 3, 4, 5};
// 같은 표현
int[] a = {1, 2, 3, 4, 5};
new int[ ] 는 생략할 수 있음
(3) 배열 선언 후 배열 요소의 값들을 지정하는 방법
int[] a;
a = new int[] {1, 2, 3, 4, 5};
new int[ ] 생략 불가(메모리 할당)
배열 요소의 개수
(1) 배열이름.length
int[] a = {1, 2, 3, 4, 5};
System.out.println(a.length);
5
(2) 배열의 크기를 초과하여 사용하지 않기
int[] a = {1, 2, 3, 4, 5};
a[5] = 100;
a[5]는 배열의 6번째 요소이므로 존재하지 않는 요소에 접근하려하면 에러 발생
배열 실습
public class ArrayBasic {
public static void main(String[] args) {
// 배열의 선언
int a[];
int[] b;
// 배열의 생성
int c[] = new int[5];
int d[] = new int[5];
int e[];
e = new int[5];
// 배열 초기화
int[] f = new int[5];
f[0] = 10;
f[1] = 20;
f[2] = 30;
f[3] = 40;
f[4] = 50;
// int[] g = new int[5] {10, 20, 30, 40, 50}; 오류발생
int[] g = new int[] {10, 20, 30, 40, 50};
int[] h = {10, 20, 30, 40 ,50};
int[] i;
i = new int[] {10, 20, 30, 40, 50};
// 배열요소의 개수
System.out.println("배열 i의 요소 개수는 "+i.length);
int[] j = new int[] {10, 20, 30, 40, 50};
j[5] = 100; // error
}
}
배열 i의 요소 개수는 5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at ArrayBasic.main(ArrayBasic.java:34)
j[5]는 ArrayIndexOutOfBoundsException 오류 발생
배열과 반복문 사용하기
- 배열의 인덱스값은 0부터 순차적으로 증가함
- 반복문을 이용하면 인덱스값을 순차적으로 증가할 수 있음
int[] a = {1, 2, 3, 4, 5};
for(int i=0; i<5; i++){
System.out.println(a[i]);
}
a[0]부터 a[4] 까지 1씩 증가하면서 출력
배열과 반복문의 예
(1) 배열의 요소값 저장하기
int[] a = new int[5];
for(int i=0; i<5; i++){
a[i] = (i+1) * 10;
}
a[0] = 10;
a[1] = 20;
...
a[4] = 50;
(2) 배열의 합계와 평균 구하기
int[] a = {34, 10, 25, 71, 80};
int sum = 0;
for(int i=0; i<5; i++){
sum += a[i];
}
System.out.println("합계="+sum+", 평균="+(sum/5));
sum = 34 + 10 + 25 + 71 + 80
합계=220, 평균=44
(3) 배열이름.length 활용하기
int[] a = {1, 2, 3, 4, 5};
for(int i=0; i<a.length; i++){
System.out.println(a[i]);
}
length를 이용해서 배열 요소의 개수를 구한다.
배열과 반복문 실습
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// 배열의 값 출력하기
System.out.println("[배열의 값 출력하기]");
int[] a = {1, 2, 3, 4, 5};
for(int i=0; i<a.length; i++) {
System.out.println("a["+i+"] = "+a[i]);
}
// 배열의 값 저장하기
System.out.println("[배열의 값 저장 후 출력하기]");
for(int i=0; i<a.length; i++) {
a[i] = (i+1) * 10;
}
for (int i=0; i<a.length; i++) {
System.out.println("a["+i+"] = "+a[i]);
}
// 배열의 합계와 평균 구하기
System.out.println("[배열의 힙계와 평균 구하기]");
int[] arr = {34, 10, 25, 71, 84};
int sum = 0;
for(int i=0; i<arr.length; i++) {
sum += arr[i];
}
System.out.println("합계 = "+sum+", 평균 = "+((double)sum/arr.length));
// 2개 배열의 합계 배열 만들기
System.out.println("[2개 배열의 합계 배열 만들기]");
int[] arr1 = {12, 32, 76, 51, 49};
int[] arr2 = {34, 56, 29, 54, 21};
int[] arr3 = new int[5];
for(int i=0; i<arr1.length; i++) {
arr3[i] = arr1[i] + arr2[i];
}
for(int i=0; i<arr3.length; i++) {
System.out.println(arr1[i]+" + "+arr2[i]+" = "+arr3[i]);
}
// 입력받은 값의 짝수와 홀수의 합계 계산하기, 0 입력시 종료
System.out.println("[입력받은 값의 짝수와 홀수의 합계를 계산하기]");
int[] total = {0, 0};
int input;
do {
System.out.print("숫자입력 : ");
input = s.nextInt();
// total[0]에는 짝수 합계, total[1]에는 홀수 합계
total[input % 2] += input;
} while(input != 0); // 0이 아니면 반복, 0이면 빠져나온다.
System.out.println("짝수의 합 = "+total[0]+", 홀수의 합 = "+total[1]);
}
}
문자열 배열
String[] a = new String[3];
문자열 배열 초기화
// 배열 선언 및 생성과 동시에 배열 요소의 값들을 지정하는 방법
String[] a = new String[] {"apple", "banana", "melon"};
// 배열 선언 및 생성 후에 배열 요소의 값들을 지정하는 방법
String[] a = new String[3];
a[0] = "apple";
a[1] = "banana";
a[2] = "melon";
// 배열 선언 및 생성 후에 String 클래스를 이용하여 메모리를 할당하여 지정
String[] a = new String[3];
a[0] = new String("apple");
a[1] = new String("banana");
a[2] = new String("melon");
문자열 배열 출력하기
String[] a = new String[] {"apple", "banana", "melon"};
for(int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
apple
banana
melon
문자열 배열 실습
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("[과일]");
String[] fruit = new String[] {"apple", "banana", "melon"};
for(int i=0; i<fruit.length; i++) {
System.out.print(fruit[i]+" ");
}
System.out.println();
System.out.println("[책]");
String[] book = new String[3];
book[0] = "수학책";
book[1] = "과학책";
book[2] = "소설책";
for(int i=0; i<book.length; i++) {
System.out.print(book[i]+" ");
}
System.out.println();
System.out.println("[드라마]");
String[] drama = new String[3];
drama[0] = new String("sunshine");
drama[1] = new String("doctor");
drama[2] = new String("things");
for(int i=0; i<drama.length; i++) {
System.out.print(drama[i]+" ");
}
System.out.println();
// 문자열 입력받아 배열에 넣기
String[] name = new String[5];
for(int i=0; i<name.length; i++) {
System.out.print((i+1)+"번째 이름을 입력하세요 : ");
name[i] = s.nextLine();
}
System.out.println("[입력한 이름]");
for(int i=0; i<name.length; i++) {
System.out.print(name[i]+" ");
}
System.out.println();
}
}
main() 메소드 인수 처리
프로그램 실행 시 main() 메소드의 인수로 값이 넘어옴 (문자열 배열 args로 값이 넘어옴)
인수 지정하는 방법
1. [명령 프롬프트]에서 실행 시 지정하는 방법
C:> java ArrayString Hello Java
Class ArrayString {
public static void main(String[] args) {
System.out.println(args[0]); // "Hello";
System.out.println(args[1]); // "Java";
}
}
2. [이클립스]에서 지정하는 방법
[Run]-[Run Configurations] 실행
Arguments에서 지정
main 메소드 인수 처리 실습
(1) cmd
public class Sample {
public static void main(String[] args) {
System.out.println("main() 메소드 인수 값");
for(int i=0; i<args.length; i++) {
System.out.println((i+1)+"번째 인수의 값은 ["+args[0]+"입니다.");
}
}
}
실습 파일이 있는 폴더로 이동 후 java 파일명 apple banana melon 과 같이 인수 값을 cmd에서 넘겨줄 수 있다.
(2) eclipse
띄어쓰기를 중심으로 인수를 입력한다.
main() 메소드 인수 값
1번째 인수의 값은 [자바] 입니다.
2번째 인수의 값은 [프로그램] 입니다.
3번째 인수의 값은 [자바] 입니다.
4번째 인수의 값은 [123] 입니다.
다차원 배열 이해하기
- 1차원 배열
- 행 1개, 열 N개
- 자료형[열]
- 2차원 배열
- 행 N개, 열 N개
- 자료형[행][열]
- 3차원 배열
- 층 N개, 행 N개, 열 N개
- 자료형[층][행][열]
2차원 배열의 선언, 생성, 초기화
(1) 2차원 배열의 선언 및 생성 후 배열 요소에 초기값 지정
int[][] a = new int[3][4];
a[0][0] = 1;
a[0][1] = 2;
...
a[2][3] = 12;
(2) 2차원 배열의 선언 및 생성과 동시에 초기값 지정
int[][] a = new int[][] {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int[][] a = {{1, 2, 3}, {4, 5, 6}};
2차원 가변 배열
행의 개수는 정해져 있고, 열의 개수가 가변임
2차원 가변 배열 선언 및 생성 초기화
방법 (1)
int[][] a = new int[2][]; // 행의 개수만 지정
a[0] = new int[3]; // 열의 개수는 new 연산자로 지정
a[1] = new int[4]; // 열의 개수는 new 연산자로 지정
a[0][0] = 1;
a[0][1] = 2;
...
a[1][3] = 7;
방법 (2)
int[][] a = new int[2][];
a[0] = new int[] {1, 2, 3};
a[1] = new int[] {4, 5, 6, 7};
방법 (3)
int[][] a = new int[][] {{1, 2, 3}, {4, 5, 6, 7}};
2차원 배열의 length 멤버 변수(필드)
- 배열이름.length : 2차원 배열의 행(row)의 개수
- 배열이름[행].length : 2차원 배열의 열(column)의 개수
int[][] a = new int[][] {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
a.length = 행 = 3
a[0].length, a[1].length, a[2].length = 열 = 4
2차원 가변 배열인 경우
int[][] a = new int[][] {{1, 2, 3, 4, 5, 6}, {7, 8, 9, 10}, {11, 12, 13, 14, 15}};
a.length = 행 = 3
a[0].length = 6
a[1].length = 4
a[2].length = 5
2차원 배열 출력하기
int[][] a = new int[][] {{1, 2, 3, 4, 5, 6}, {7, 8, 9, 10}, {11, 12, 13, 14, 15}};
for(int row=0; row<a.length; row++) {
for(int col=0; col<a[row].length; col++) {
System.out.println(a[row][col]);
}
}
안쪽 for문 : 행 반복, row변수 0부터 2까지 반복
System.out.println(a[row][col]); == 배열 요소별 출력
2차원 배열 실습
public class Sample {
public static void main(String[] args) {
// 2차원 배열 정의(선언, 생성, 초기화) 방법
int[][] a = new int[2][3];
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 5;
a[1][2] = 6;
int[][] b = new int[][] {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int[][] c = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
System.out.println("[2차원 배열 출력]");
for(int row=0; row<b.length; row++) {
for(int col=0; col<b[row].length; col++) {
System.out.print(b[row][col]+" ");
}
System.out.println();
}
// 2차원 가변 배열
int[][] d = new int[2][];
d[0] = new int[3];
d[1] = new int[4];
d[0][0] = 1;
d[0][1] = 2;
d[0][2] = 3;
d[1][0] = 4;
d[1][1] = 5;
d[1][2] = 6;
d[1][3] = 7;
int[][] e = new int[2][];
e[0] = new int[] {1, 2, 3, 4, 5};
e[1] = new int[] {1, 2, 3};
int[][] f = new int[][] {{1, 2, 3, 4, 5, 6}, {7, 8, 9, 10}, {11, 12, 13, 14, 15}};
System.out.println("[2차원 가변 배열 출력]");
for(int row=0; row<f.length; row++) {
for(int col=0; col<f[row].length; col++) {
System.out.print(f[row][col]+" ");
}
System.out.println();
}
}
}
[2차원 배열 출력]
1 2 3 4
5 6 7 8
9 10 11 12
[2차원 가변 배열 출력]
1 2 3 4 5 6
7 8 9 10
11 12 13 14 15
적용하기
1) 3행*4열의 2차원 배열을 선언하기
2) 2차원 배열의 값을 키보드로 입력받기
3) 행과 열의 개수만큼의 1차원 배열을 만들어 행과 열의 합계를 계산
4) 2차원 배열과 행과 열의 합계 배열을 출력
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[][] arr = new int[3][4];
int[] row_sum = new int[3];
int[] col_sum = new int[4];
System.out.println("[정수를 입력하세요] : ");
for(int row=0; row<arr.length; row++) {
for(int col=0; col<arr[row].length; col++) {
System.out.print("["+row+"] ["+col+"] = ");
arr[row][col] = s.nextInt();
row_sum[row] += arr[row][col];
col_sum[col] += arr[row][col];
}
}
System.out.println("[2차원 배열(행합계, 열합계)]");
for(int row=0; row<arr.length; row++) {
for(int col=0; col<arr[row].length; col++) {
System.out.print(arr[row][col]+" ");
}
System.out.println("("+row_sum[row]+")");
}
for(int col=0; col<col_sum.length; col++) {
System.out.print("("+col_sum[col]+")");
}
}
}
'온라인 강좌 > 안드로이드 프로그래밍을 위한 자바기초' 카테고리의 다른 글
7차시 상속을 활용한 객체지향 프로그래밍 기본 문법 이해하기 (0) | 2023.07.11 |
---|---|
6차시 클래스를 이용한 객체지향 프로그래밍 기본 문법 이해하기 (0) | 2023.07.10 |
4차시 조건문과 반복문의 기본 문법 이해하기 (0) | 2023.07.08 |
3차시 연산자의 기본 문법 이해하기 (0) | 2023.07.08 |
2차시 자료형과 변수의 기본 문법 (0) | 2023.07.07 |