배열이란?
- “배열은 같은 타입의 여러변수를 하나의 묶음으로 다루는 것”
- 배열 선언 : int[] score = new int[5] → int 공간이 5개가 있다는 것
- 인덱스는 0부터 시작
- 배열을 다루려면 참조변수가 필요함 → 참조변수에 이름을 붙인 뒤 저장공간을 사용
- score 참조변수 [0], score[2], score[3], score[4] 이렇게 사용
- 같은 타입만 사용가능 int[] score = new int[숫자]
배열의 선언과 생성
- 배열의 선언 - 배열을 다루기 위한 참조변수의 선언
- int[] score;, String[] name;
- int score [];
타입[] 배열이름; → int [] score;
- 변수이름 = new 타입[길이]; → score = new int[5]
선언 방법 String[] coffees = new String[4];
package chap_05;
public class _01_Array {
public static void main(String[] args) {
// 배열 : 같은 자료형의 값 여러 개를 저장하는 연속된 공간
String coffeeRoss = "아메리카노";
String coffeeRachel = "카페모카";
String coffeeChandler = "라떼";
String coffeeMonica = "카푸치노";
System.out.println(coffeeRoss + "하나"); //아메리카노 하나
System.out.println(coffeeRachel + "하나");
System.out.println(coffeeChandler+ "하나");
System.out.println(coffeeMonica+ "하나");
System.out.println("주세요");
//배열 선언 첫번째 방법
String[] coffees = new String[4]; //크기 4에 해당하는 똑같은 배열을 만듦
//배열 선언 두번째 방법
String coffees[] = new String[4]; 위에꺼랑 대괄호의 위치만 다름
coffees[0] = "아메리카노"; //인덱스 값은 항상 0부터 시작한다.
coffees[1] = "카페모카"; //인덱스 값은 항상 0부터 시작한다.
coffees[2] = "라떼"; //인덱스 값은 항상 0부터 시작한다.
coffees[3] = "카푸치노"; //인덱스 값은 항상 0부터 시작한다.
//배열 선언 세번째 방법
String[] coffees = new String[] {"아메리카노", "카페모카", "라떼", "카푸치노"} ;
//배열 선언 네번쨰방법
String[] coffees = {"아메리카노", "카페모카", "라떼", "카푸치노"} ;
//커피 주문
System.out.println(coffees[0] + " 하나"); //아메리카노 하나 출력
System.out.println(coffees[1] + " 하나"); //아메리카노 하나 출력
//챈슬러 라떼를 에스프레소로 변경할 경우
coffees[2] = "에스프레소"; // 커피즈 2번째 배열에 에스프레소로 변경
System.out.println(coffees[2] + " 하나"); //아메리카노 하나 출력
System.out.println(coffees[3] + " 하나"); //아메리카노 하나 출력
System.out.println("주세요");
// 다른 자료형 가능
// int 타입
int[] i = new int[];
i[0] = 1;
i[1] = 1;
i[2] = 1;
//double 타입
double[] d = new double[] {10.0, 11.2, 13.5};
// boolean 타입
boolean[] b = {true, true, true};
}
}
- 배열 순회
package chap_05;
public class _02_Arrayloop {
public static void main(String[] args) {
// 배열의 순회
String[] coffees = {"아메리카노", "카페모카", "라떼", "카푸치노"} ;
System.out.println(coffees[0] + " 하나");
//for 반복문 순회 (i값만 바꿔서 반복문 수행할 수 있음)
for (int i = 0; i < 4; i++) {
System.out.println(coffees[i] + " 하나");
}
System.out.println("주세요");
System.out.println("------------------------");
// 배열의 길이를 이용한 순회 방법 (for i)
for (int i = 0; i < coffees.length; i++) {
System.out.println(coffees[i] + " 하나");
System.out.println("주세요");
System.out.println("------------------------");
// enhanced for (for-each) 반복문 (coffees에 있는 배열들을 순서대로 순회하는것)
for (String coffee : //foreach 사용하면 빠르게 for문 수행 가능
coffees) {
System.out.println(coffee + " 하나");
}
System.out.println("주세요");
}
}
= for i 문, foreach 사용하면 빠르게 for 문 사용 가능
- for i : 배열의 길이를 이용한 순회 방법
- foreach : enhanced for (for-each) 반복문 (coffees에 있는 배열들을 순서대로 순회하는것)
- 다차원 배열
방법1) 1차원배열들을 중괄호로 한줄씩 적는 방법
public class _03_MultiArray {
public static void main(String[] args) {
// 다차원 배열 (2차원 배열)
//소규모 영화관 좌석
// A1 - A5
// B1 - B5
// C1 - C5
//1차원 배열은 중괄호를 한줄씩 적는것
String[] seatA = {"A1", "A2","A3","A4","A5"};
String[] seatB = {"B1", "B2","B3","B4","B5"};
String[] seatC = {"C1", "C2","C3","C4","C5"
방법2) 1차원 배열들을 중괄호로 감싸서 한줄로 적는 방법
public class _03_MultiArray {
public static void main(String[] args) {
//2차원배열은 1차원 배열들을 중괄호로 감싸는 것
// 3 x 5 크기의 2차원 배열
String[][] seats = new String[][] {
{"A1", "A2","A3","A4","A5"},
{"B1", "B2","B3","B4","B5"},
{"C1", "C2","C3","C4","C5"},
};
//B2에 접근하려면?
System.out.println(seats[1][1]); // B2 출력됨
//C5에 접근하려면?
System.out.println(seats[2][4]);
System.out.println(seats); //C5출력됨
//첫 줄에는 3칸, 둘째줄에는 4칸, 셋째줄에는 5칸
String[][] seats2 = {
{"A1", "A2", "A3"},
{"B1", "B2", "B3", "B4"},
{"C1", "C2", "C3", "C4", "C5"} };
//A3에 접근하려면?
System.out.println(seats2[0][2]);
//A5에 접근하려면?
System.out.println(seats2[0][4]); //에러 발생:A5가 없기때문에 배열범위가 벗어나 에러
}
}
/* 3차원 배열 만들기! (세로 x 가로 x 높이)
String[][][] marray = new String[3][3][3]{
{{}, {}, {}},
{{}, {}, {}},
{{}, {}, {}}
};
}
- 다차원 배열 순회 방법
package chap_05;
public class _04_MultiArrayLoop {
public static void main(String[] args) {
//다차원 배열 순회
//문제1
String[][] seats = new String[][]{
{"A1", "A2", "A3", "A4", "A5"},
{"B1", "B2", "B3", "B4", "B5"},
{"C1", "C2", "C3", "C4", "C5"},
};
// 이중 반복문 : fori 안에 fori문 하나더
for (int i = 0; i < 3; i++) { //세로 기준
for (int j = 0; j < 5; j++) { //가로기준
System.out.print(seats[i][j] + " "); //세로와 가로를 하나씩 순회하면서 출력
}
System.out.println();
//A1 A2 A3 A4 A5
//B1 B2 B3 B4 B5
//C1 C2 C3 C4 C5 출력
}
System.out.println("----------------------------------");
//문제2
//첫 줄에는 3칸, 둘째줄에는 4칸, 셋째줄에는 5칸
String[][] seats2 = {
{"A1", "A2", "A3"},
{"B1", "B2", "B3", "B4"},
{"C1", "C2", "C3", "C4", "C5"}
};
for (int i = 0; i < seats2.length; i++) { //세로 기준 seats2.length 사용
for (int j = 0; j <seats2[i].length; j++) { //가로 기준
System.out.print(seats[i][j] + " "); //세로와 가로를 하나씩 순회하면서 출력
}
System.out.println();
}
//A1 A2 A3
// B1 B2 B3 B4
//C1 C2 C3 C4 C5 출력
}
//문제3
System.out.println("---------------------");
// 세로크기 10 x 가로크기 15에 해당하는 영화관 좌석
String [][] seats3 = new String[10][15];
String[] eng = {"A","B","C","D","E","F","G","H","I","J"};
for (int i = 0; i < seats3.length; i++) { //세로
for (int j = 0; j < seats3[i].length; j++) { //가로
seats3[i][j] = eng[i] + (j + 1);
}
}
// 표구매 H9 H10 좌석 나갔다고 가정
seats3[7][8] = "__";
seats3[7][9] = "__";
//영화관 좌석 출력
for (int i = 0; i < seats3.length; i++) { //세로 기준 seats2.length 사용
for (int j = 0; j <seats3[i].length; j++) { //가로 기준
System.out.print(seats3[i][j] + " "); //세로와 가로를 하나씩 순회하면서 출력
}
System.out.println();
}
}
- 아스키코드
public class _05_ASCII {
public static void main(String[] args) {
//아스키 코드(ANSI) : 미국 표준 코드
char c = 'A'; //알파벳 대문자(A)는 65부터시작, 소문자(a)는 97부터 시작, 숫자(0)는 48부터 시작함
System.out.println(c);
System.out.println((int)c); //아스키코드 65가 출력됨
c = 'B';
System.out.println(c);
System.out.println((int)c);
c++;
System.out.println(c);
System.out.println((int)c);
System.out.println("----------------");
// 세로크기 10 x 가로크기 15에 해당하는 영화관 좌석
String [][] seats3 = new String[10][15];
char ch = 'A';
for (int i = 0; i < seats3.length; i++) { //세로
for (int j = 0; j < seats3[i].length; j++) { //가로
seats3[i][j] = String.valueOf(ch) + (j + 1);
}
ch++;
}
//영화관 좌석 정보 확인
for (int i = 0; i < seats3.length; i++) { //세로 기준 seats2.length 사용
for (int j = 0; j <seats3[i].length; j++) { //가로 기준
System.out.print(seats3[i][j] + " "); //세로와 가로를 하나씩 순회하면서 출력
}
System.out.println();
}
}
}
QUIZ 05
package chap_05;
public class _Quix_05 {
public static void main(String[] args) {
int[] size = new int[10] ;
for (int i = 0; i <size.length; i++) {
size[i] = 250 + (5 * i);
}
for (int sizes: size) {
System.out.println("사이즈 " + sizes + " (재고 있음)");
}
}
}
배열의 인덱스
- 배열의 인덱스 - 각 요소에 자동으로 붙은 일련 번호
- “인덱스의 범위는 0부터 ‘배열길이-1’까지 new int[5] 라면 범위는 0~4까지
- 저장공간 = 배열의 요소
int value = score[3]; //배열 score의 4번쨰 요소의 값을 읽어서 value에 저장
public class Ex5_1_temp {
public static void main(String[] args) {
// int[] score; //1. 배열 score 선언 참조변수
// score = new int[5]; //2. 배열의 생성(int 저장공간이 5)
int[] score = new int[5]; //배열의 선언과 생성을 동시에 할 수 있음
score[3] = 100; // 스코어 3에 100저장
// System.out.println(score[3]);
System.out.println("score[0]=" + score[0]);
System.out.println("score[1]=" + score[1]);
System.out.println("score[2]=" + score[2]);
System.out.println("score[3]=" + score[3]);
System.out.println("score[4]=" + score[4]);
int value = score[3]; //value에 스코어3값 저장
System.out.println("value=" + value);
}
}
배열의 길이
- 배열이름.length - 배열의 길이(int형 상수-)
int[] arr = new int[5]; //길이가 5인 int 배열
int tmp = arr.length; //arr.length의 값은 5이고 tmp에 5가 저장된다.
- 배열은 한번 생성하면 그 길이를 바꿀 수 없다.
int[] score = new int[6];
for(int i = 0; i < 6; i++) //인덱스 범위 벗어남
System.out.println(score[i]);
int[] score - new int[5];
for(int i = 0; i < **score.length**; i++); //score.length로 사용 -> 인덱스 범위 벗어나지 않게
System.out.println(score[i]);
public class Ex5_1_temp {
public static void main(String[] args) {
int[] arr = new int[10];
System.out.println("arr.length=" + arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println("arr["+i+"]="+ arr[i]);
}
}
}
배열의 초기화
- 배열의 각 요소에 처음으로 값을 저장하는 것
int[] score = new int[5]; //길이가 5인 int형 배열을 생성한다.
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
⇒ fori문 사용 / 괄호 사용
- 초기화 방법
- int[] score = new int[];
- int[] score = {50,60,70,80,90}; // new int[]를 생략할 수 있음 ** 가장 많이 사용
배열의 출력
- int[]iArr = {100,95,80,70,60};
- System.out.println(iArr);
1번방법
for (int i = 0; i < iArr.length; i++) {//배열의 요소를 순서대로 하나씩 출력한다.
System.out.println(iArr[i]);
}
2번방법
System.out.println(Arrays.toStringz(iArr));
예제)
import java.util.Arrays;
public class Ex5_1_temp {
public static void main(String[] args) {
int[] iArr = {100, 95, 80, 70, 60}; //길이가 5인 int 배열
for (int i = 0; i < iArr.length; i++) { //1번 방법
System.out.println(iArr[i]);
}
System.out.println(Arrays.toString(iArr)); //2번 방법 한번에 실행할 수 있음
}
}
100
95
80
70
60
[100, 95, 80, 70, 60]
예제2)
class Ex5_1 {
public static void main(String[] args) {
int[] iArr1 = new int[10];
int[] iArr2 = new int[10];
int[] iArr3 = {100, 95, 80, 70, 60};
char[] chArr = {'a', 'b', 'c', 'd'};
for (int i=0; i < iArr1.length ; i++ ) {
iArr1[i] = i + 1; //
}
for (int i=0; i < iArr2.length ; i++ ) {
iArr2[i] = (int)(Math.random()*10) + 1; // 1~10의 숫자를 순서대로 배열
}
// 배열에 저장된 값들을 출력한다
for(int i=0; i < iArr1.length;i++) {
System.out.print(iArr1[i]+",");
}
System.out.println();
System.out.println(Arrays.toString(iArr2));
System.out.println(Arrays.toString(iArr3));
System.out.println(Arrays.toString(chArr));
System.out.println(iArr3);
System.out.println(chArr);
}
}
1,2,3,4,5,6,7,8,9,10,
[5, 6, 8, 10, 2, 8, 2, 2, 6, 8]
[100, 95, 80, 70, 60]
[a, b, c, d]
[I@34a245ab
abcd
배열의 활용
- 총합과 평균 : 배열의 모든 요소를 더해서 총합과 평균을 구한다.
public class Ex5_2 {
public static void main(String[] args) {
int sum = 0; // 총합을 저장하기 위한 변수
float average = 0f; // 평균을 저장하기 위한 변수
int[] score = {100, 88, 100, 100, 90};
for (int i=0; i < score.length ; i++ ) {
sum += score[i];
}
average = sum / (float)score.length ; // 계산결과를 float타입으로 얻기위해 형변환
System.out.println("총합 : " + sum);
System.out.println("평균 : " + average);
}
}
총합 : 478
평균 : 95.6
public class Ex5_3 {
public static void main(String[] args) {
int[] score = { 79, 88, 91, 33, 100, 55, 95 };
int max = score[0]; // 배열의 첫번째 값으로 최대값을 초기화한다.
int min = score[0]; // 배열의 첫번쨰 값으로 최소값을 초기화한다.
for(int i=1; i < score.length;i++) {
if(score[i] > max) {
max = score[i];
} else if(score[i] < min) {
min = score[i];
}
} // end of for
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
} // end of main
} // end of class
최대값 : 100
최소값 : 33
class Ex5_4 {
public static void main(String[] args) {
int[] numArr = {0,1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(numArr));
for (int i=0; i < numArr.length; i++ ) {
int n = (int) (Math.random() * 10); // 0~9중의 한 값을 임의로 얻는다.
int tmp = numArr[i];
numArr[i] = numArr[n];
numArr[n] = tmp;
}
System.out.println(Arrays.toString(numArr));
}
} // main의 끝
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 2, 3, 9, 4, 6, 1, 0, 8, 7]
String 배열의 선언과 생성
String[] name = new String[3];
import java.util.Arrays;
public class Ex5_1_temp {
public static void main(String[] args) {
String[] strArr = {"가위", "바위", "보"};
System.out.println(Arrays.toString(strArr));
for (int i = 0; i < 10; i++) {
int tmp = (int) (Math.random() * 3);
System.out.println(strArr[tmp]);
}
}
}
[가위, 바위, 보]
가위
보
바위
가위
보
바위
바위
바위
가위
가위
2차원 배열
- 테이블 형태의 데이터를 저장하기 위한 배열 → 1차원 배열이 여러개 모인개 2차원 배열이다
- int[][]score = new int[4][3]; //4행 3열의 2차원 배열 생성
2차원 배열의 초기화
int [][] arr = {{1,2,3}, {4,5,6}};
int [][] arr = {{1,2,3},
{4,5,6}};
'Java' 카테고리의 다른 글
[Java] 연산자 (0) | 2023.07.07 |
---|---|
[Java] 메서드 (0) | 2023.07.07 |
[Java] 제어문 (조건문, 반복문) (0) | 2023.07.07 |
[Java] 문자열 (0) | 2023.07.07 |
[Java] 형변환 (0) | 2023.07.07 |