JAVA 배열, 2차원 배열
- 2017 SMHRD 노트
- 2018. 5. 21.
JAVA 배열
다음의 질문에 답해보도록 하자.
- 배열이 필요한 이유는 무엇일까?
- 배열은 어떻게 구성되어있는가?
배열의 선언 2가지 방법
일반적인 배열 선언 (기본값은 0)
int[] array = new int[5]; // default : 0
배열 선언과 동시에 값을 할당하기
int[] array2 = {1,2,3,4,5}; //선언과 동시에 값을 할당
반복문과 배열을 함께 사용하기 (for문과 array의 결합)
레퍼런스 타입을 가지고 배열을 만들 수도 있다. ex) CustomClass[]
배열변수에는 메모리상의 어떤 지점을 가리키는 주소값이 할당되어 있다.
배열변수가 담고 있는 정보 : 주소(레퍼런스 타입 변수의 특징, 메모리의 값이 담긴 위치를 가리킨다.)
[실습1] 크기 10의 배열에 난수를 담고 배열의 모든 값을 합하여 출력해보기
public static void main(String[] args) {
Random rd = new Random();
int[] arr = new int[10];
int sum = 0;
for(int i = 0; i < 10; i++) {
arr[i] = rd.nextInt(20) + 1;
System.out.print( i + ": " + arr[i] + "\t\t");
sum += arr[i];
}
System.out.println("난수의 합계: " + sum);
}
[실습2] 정의된 배열에서 홀수의 개수 구하기
public static void main(String[] args) {
int[] arr = { 10, 34, 6, 18, 10, 4, 123, 56, 79 };
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
count++;
}
}
System.out.println(count);
}
[실습3] 정의된 배열 중 최댓값 찾기
※ 최댓값이나 최솟값을 판단하는 Max 변수를 0이나 큰 값이 아닌 배열의 첫 번째 값으로 담기도 한다.
public static void main(String[] args) {
Random rd = new Random();
int[] arr = new int[10];
int max = 0;
for(int i=0; i<arr.length; i++) {
arr[i] = rd.nextInt(30)+1;
System.out.print(arr[i] + " ");
if (arr[i] > max) {
max = arr[i];
}
}
for (int i : arr) {
if(max < i)
max = i;
}
System.out.println("\n" + max);
}
JAVA for each 문
확장된 형태의 for 문
- Q. 확장 for 문이란?
조금 더 문법이 간결하지만 사용용도는 제한되어 있다. 배열의 길이에 대한 판단을 하지 않고 배열의 모든 값을 추출해야 할 때.
문법은 아래와 같다.
for(int i : array) {
//(실행구문)
}
[실습4] 정답 산출 후 총점 출력 프로그램
배열로 정답은 주어져있으며, 사용자의 정답정보를 입력받아 기존 배열과 비교하여 각 점수별 정답여부와 총점을 출력한다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] answer = {1,2,3,4,5};
int[] inputAnswer = new int[5];
System.out.println("=== 채점하기 ===");
System.out.println("답을 입력하세요.");
for (int i = 0; i < 5; i++) {
System.out.print( (i+1) + "번답 >> ");
inputAnswer[i] = sc.nextInt();
}
System.out.println("정답확인");
int count = 0;
for(int i = 0; i < 5; i++) {
if(answer[i] == inputAnswer[i]) {
System.out.print("O\t");
count++;
}
else
System.out.print("X\t");
}
System.out.println("총 점 : " + count*20);
}
Reference Type (참조형) 배열 만들기
String 은 참조형이다. 따라서 String 배열을 선언하면 참조형 배열을 선언한다고 할 수 있다.
//참조형(예를들어 String)의 배열을 선언할 수 있다.
String[] names = {"AB", "CD", "EF", "GD"}
[실습5] Scanner 로 사람 이름을 입력받아 해당 이름이 몇 번째 인덱스에 있는지 알려주는 프로그램
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = {"황해병", "이은별", "김미현", "박병선", "차현숙"};
System.out.print("입력 : ");
String input = sc.nextLine();
int num = 0;
for(int i =0; i < arr.length; i++) {
if(input.equals(arr[i]))
num = i+1;
}
System.out.println(num + "번째에 있음");
}
[실습6] 배열의 인덱스의 수 만큼 별을 출력하기
※ 세로로도 찍어보자. 이거 해보고 말고는 옵션!
public static void main(String[] args) {
Random rd = new Random();
int[] arr = new int[5];
for(int i = 0; i < arr.length; i++) {
arr[i] = rd.nextInt(5)+1;
System.out.print(arr[i] + " : ");
for(int j = 0; j < arr[i]; j++) {
System.out.print("*");
}
System.out.println();
}
}
JAVA 2차원 배열
변수가 묶여 1차원 배열이 된다면, 1차원 배열이 묶여 2차원 배열이 된다고 할 수 있다.
array2D[][]
의 구조
array2D : 배열의 주소가 저장되어있는 메모리를 참조한다.
array2D[0] : 배열의 배열의 주소가 저장되어 있는 메모리를 참조한다.
array2[0][1] : array2[0]
에 저장되어있는 주소가 가리키는 메모리 주소의 [1]
번째 블록에 저장된 값을 불러온다.
비정방형 배열
다음과 같은 배열을 비정방형 배열이라고 할 수 있다.
내부 배열의 길이가 서로 모두 다를 수 있다.
{{1,2,3},{4,5,6,7},{7,8}}
[실습7] 비정방형 배열을 순회하며 모든 데이터를 표현해보기
비정방형 배열은 내부 배열의 크기가 서로 다를 수 있음에 유의한다.
public static void main(String[] args) {
int[][] arr = new int[2][3];
int[][] arr2 = {{1,2,3},{4,5,6,7},{8,9}};
for(int i = 0; i < arr2.length;i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j]);
}
System.out.println();
}
}
3차원 및 n차원 배열도 가능하다. [][][], 그러나 특별한 경우가 아닌 이상 잘 쓰이지는 않는다.
[실습8] 2차원 정방형 배열 90도 회전하기
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr2 = new int[3][3];
System.out.println("원본 배열 출력");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
System.out.println("90도 회전");
for(int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr2[j][i] = arr[2-i][j];
}
}
System.out.println("회전한 배열 출력");
for(int i=0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j]);
}
System.out.println();
}
}
반응형
'2017 SMHRD 노트' 카테고리의 다른 글
JAVA 크롤러 만들기 2 - 리뷰 크롤링, 이미지 IO, 웹툰 크롤링 (0) | 2018.06.05 |
---|---|
JAVA 크롤러 만들기 1 - 뉴스 기사 크롤링 (0) | 2018.06.05 |
JAVA 영화 예매 프로그램, 상속실습, 추상메소드 (0) | 2018.05.31 |
JAVA 외부 API 활용, MP3 플레이어, MVC 패턴 (0) | 2018.05.31 |
[SMHRD] [170920] JAVA 학생 관리 프로그램, 컬렉션, ArrayList (0) | 2018.05.31 |