배열
같은 자료형의 변수들을 하나의 묶음으로 다루는 것
- 배열은 저장된 값 마다 인덱스 번호가 부여됨. (0부터 시작)
- 이름은 하나지만 저장공간은 여러개
배열 선언과 할당
배열 선언
자료형[ ] 배열명;
자료형 배열명[ ];
배열 할당
배열명 = new 자료형[배열크기];
배열 선언과 할당
자료형[ ] 배열명 = new 자료형[배열크기];
자료형 배열명[ ] = new 자료형[배열크기];
배열 초기화
- index가 순차적으로 증가함에 따라 초기화 할 리터럴 값이 규칙적이라면 반복문을 통해 배열 초기화 가능
- 인덱스를 이용한 초기화
- for문을 이용한 초기화
- 선언과 동시에 초기화
배열 저장구조
- 배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
- 배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리
- int[ ] arr = new int[4];
- 숙지할 포인트 : 참조변수, 참조변수는 배열의 주소를 저장, 인덱스를 기준으로 참조
- 주소값 : heap영역의 주소를 저장
public class Application1 {
public static void main(String[] args) {
/* 배열이란?
* 동일한 자료형의 묶음(연속된 메모리 공간에 값을 저장하고 사용하기 위한 용도) 이다.
* 배열은 heap영역에 new 연산자를 이용하여 할당한다.
* */
/* 배열의 사용 이유
* 만약 배열을 사용하지 않는다면 변수를 여러개 사용해야 한다.
* 1. 연속된 메모리 공간으로 관리할 수 없다. (모든 변수의 이름을 사용자가 관리해야한다.)
* 2. 반복문을 이용한 연속 처리가 불가능하다.
* */
/* 변수 5개에 값을 저장한다.
* 이 때 사용자(개발자)는 변수의 이름을 모두 알아야 한다.
* */
int num1 = 10;
int num2 = 20;
int num3 = 30;
int num4 = 40;
int num5 = 50;
/* 변수의 합을 저장하기 위한 용도의 변수 */
int sum = 0;
/* 반복문을 사용하지 못하고 일일히 더해줘야 한다. */
sum += num1;
sum += num2;
sum += num3;
sum += num4;
sum += num5;
System.out.println("sum : " + sum);
/* 배열을 이용해보자 */
/* 배열의 선언 및 할당 */
int[] arr = new int[5];
//new 연산자 + 내가 할 당하고싶은 크기
/* 하나의 이름으로 관리되는 연속된 메모리 공간이고,
* 공간마다 찾아갈 수 있는 번호(인덱스)를 이용해 접근한다.
* 연속된 패턴이 있다면 반복문을 이용할 수 있다.*/
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
/* 값을 대입할 때도 반복문을 사용할 수 있다. */
for(int i = 0, value = 0; i < arr.length; i++) {
//초기값을 반드시 하나만 지정할 필요는 없다. 콤마로 나열 가능
//콤마는 같은 타입선언을 의미한다.
//배열이름.length = 배열이 가지고있는 길이를 알려준다.
arr[i] = value += 10;
}
/* 배열의 값을 누적해서 담을 변수 선언 */
int sum2 = 0;
/* 일반적인 변수처럼 사용할 수 있다. */
sum2 += arr[0];
sum2 += arr[1];
sum2 += arr[2];
sum2 += arr[3];
sum2 += arr[4];
System.out.println("sum2 : " + sum2);
/* 배열의 값을 반복문을 이용해서 누적하여 담을 변수 */
int sum3 = 0;
for(int i = 0; i < arr.length; i++) {
sum3 += arr[i];
}
System.out.println("sum3 : " + sum3);
}
}
//콘솔창
//sum : 150
//sum2 : 150
//sum3 : 150
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 배열의 사용 방법 */
/* 배열의 선언 */
/* 자료형[] 변수명;
* 자료형 변수명[]; 두가지로 선언할 수 있다.
*
* */
/* 선언이란 : stack에 배열의 주소를 보관할 수 있는 공간을 만드는 것이다.
* 즉, 실제값이 담기는 공간이 아니라 '주소'가 담기는 공간인 것*/
int[] iarr;
char carr[];
/* 선언한 레퍼런스 변수에 배열을 할당하여 대입할 수 있다.
* new 연산자는 heap 영역에 공간을 할당하고 발생한 주소값을 반환하는 연산자이다.
* 발생한 주소를 레퍼런스 변수(참조할 변수)에 저장하고 이것을 참조하여 사용하기 때문에 참조자료형(reference type)
* 이라고 한다. 즉, 힙영역에 주소값을 가지고있는 변수 */
/* 배열을 할당할 시에는 반드시 배열의 크기를 지정해주어야 한다. */
//iarr = new int[];
//크기 기입이 누락됐다면 컴파일 에러가 뜬다.
iarr = new int[5];
carr = new char[10];
// 변수 = new 타입[크기];
/* 위의 선언과 할당을 동시에 할 수도 있다. */
int[] iarr2 = new int[5];
char carr2[] = new char[10];
//타입[] 변수 = new 타입[];
/* heap 메모리는 이름으로 접근하는 것이 아닌 주소로 접근하는 영역이다.
* stack에 저장된 주소로 heap에 할당 된 배열을 찾아갈 수 있다. */
System.out.println("iarr : " + iarr);
System.out.println("carr : " + carr);
//콘솔
// iarr : [I@7637f22
// carr : [C@3830f1c0
/* hashcode() : 일반적으로 객체의 주소값을 10진수로 변환하여 생성한 객체의 고유한 정수값을 반환한다.
* 동일 객체인지 비교할 때 사용할 목적으로 쓰여지며, 동등객체를 동일객체(주소가 같은지)
* 취급하기 위한 용도로 overriding 에서 사용한다.
* 이 부분은 뒤에서 다루게 되니, 그 전까지는 쉽게 주소값이라고 생각하고 사용하면 된다.
* */
System.out.println("iarr의 hashcode : " + iarr.hashCode());
System.out.println("iarr의 hashcode : " + carr.hashCode());
//해쉬코드 : 배열 주소를 10진수로 변환하는 메소드라고 생각할것
// iarr의 hashcode : 123961122 //콘솔
// iarr의 hashcode : 942731712 //콘솔
/* 배열의 길이를 알 수 있는 기능을 필드로 제공하고 있다.
* 필드 또한 뒤에서 다루게 될 것이다. (일종의 변수)
* 참고로 String의 문자열 길이는 메소드로 제공하고 있기 때문에 length로 사용한다. */
System.out.println("iarr2의 길이 : " + iarr2.length);
System.out.println("iarr2의 길이 : " + carr2.length);
// iarr2의 길이 : 5
// iarr2의 길이 : 10
// 혼동주의
// 스트링에서 메소드로 제공했던것은 length()였지만,
// 배열의 길이를 알아올때는 배열이름.length 방법으로 받아와야한다.
/* 스캐너를 통해 입력 받은 정수로 배열 길이를 지정하여 배열을 할당할 수 있다. */
Scanner sc = new Scanner(System.in);
System.out.print("새로 할당할 배열의 길이를 입력하세요 : ");
int size = sc.nextInt();
double[] darr = new double[size];
System.out.println("darr의 hashCode : " + darr.hashCode());
System.out.println("darr의 길이 : " + darr.length);
// darr의 hashCode : 1170794006
// darr의 길이 : 15
/* 한 번 지정한 배열의 크기는 변경하지 못한다. */
/* 배열의 사이즈를 변경한 것이 아니고, 새로운 배열을 생성하여(new) 그 주소값을 레퍼런스 변수에 덮어쓴것이다.
* 기존의 값이 아닌 더 큰값이 필요하다면 덮어 쓰도록 한다.*/
darr = new double[30];
/* hashCode 를 보면 다른 값을 가지고 있는 것을 확인할 수 있다. */
System.out.println("수정 후 darr의 hashCode : " + darr.hashCode());
System.out.println("수정 후 darr의 길이 : " + darr.length);
// 수정 후 darr의 hashCode : 1289479439
// 수정 후 darr의 길이 : 30
/* 한 번 할당된 배열은 지울 수 없다.
* 다만 레퍼런스 변수를 null로 변경하면, 더 이상 주소가 참조되지 않는 배열은
* 일정 시간이 지난 후 heap의 old 영역으로 이동하여 GC(가비지 컬렉터) 가 삭제시킨다.
* 한번 찾아갈 수 있는 주소값을 잃어버린 배열은 다시 참조 불가능하다.
* null : 아무것도 참조하고있는게 없으며(쓰이지 않음), 비웠다. 는 의미
* */
darr = null;
/* java.lang.NullPointerException */
/* 아무것도 참조하지 않고 null이라는 특수한 값을 참조하고 있는 도중에
* 참조연산자를 사용하게 될 때 발생하는 에러이다. */
System.out.println("삭제 후 darr의 길이 : " + darr.length);
//NullPointerException 발생, 원인 : 참조변수가 null 즉, 아무객체도 참조하고있지않기 때문
}
}
배열 저장구조
- Heap 영역은 값이 없는 공간이 존재 할 수 없으므로 처음 배열 선언 시 자료형별 기본값으로 초기화 됨
public class Application3 {
public static void main(String[] args) {
/* 기본적으로 배열을 선언하고 할당하게 되면
* 배열의 각 인덱스에는 자바에서 지정한 기본값으로 초기화 된 상태가 된다.\
* heap영역은 값이 없는 빈 공간이 존재할 수 없다.
* */
/* 값의 형태별 기본값
* 정수 : 0
* 실수 : 0.0
* 논리 : false
* 문자 : \u0000
* 참조 : null
* */
int[] iarr = new int[5];
/* int의 기본 값인 0으로 초기화 되어있다. */
for (int i = 0; i < iarr.length; i++) {
System.out.println("iarr[" + i + "]의 값 : " + iarr[i]);
// 콘솔창
// iarr[0]의 값 : 0
// iarr[1]의 값 : 0
// iarr[2]의 값 : 0
// iarr[3]의 값 : 0
// iarr[4]의 값 : 0
}
/* 지정한 기본 값 외의 값으로 초기화를 하고싶은 경우 블럭을 이용한다.
* 블럭을 사용하는 경우에는 new를 사용하지 않아도 되며, 값의 개수만큼 자동으로 크기가 설정된다.
* */
int[] iarr2 = {11, 22, 33, 44, 55};
/* 이러한 형식으로도 사용가능하다. */
int[] iarr3 = new int[] {11, 22, 33, 44, 55};
System.out.println("iarr2의 길이 : " + iarr2.length);
System.out.println("iarr3의 길이 : " + iarr3.length);
// 콘솔
// iarr2의 길이 : 5
// iarr3의 길이 : 5
/* 초기화 값 확인 */
for(int i = 0; i < iarr2.length; i++) {
System.out.println("iarr2[" + i + "]의 값 : " + iarr2[i]);
}
for(int i = 0; i < iarr3.length; i++) {
System.out.println("iarr3[" + i + "]의 값 : " + iarr3[i]);
}
/* 문자열 배열로도 사용할 수 있다. */
String[] sarr = {"apple", "banana", "grape"};
for(int i = 0; i < sarr.length; i++)
System.out.println("iarr3[" + i + "]의 값 : " + sarr[i]);
// iarr3[0]의 값 : apple
// iarr3[1]의 값 : banana
// iarr3[2]의 값 : grape
}
}
import java.util.Scanner;
public class Application4 {
public static void main(String[] args) {
/* 배열을 이용한 예제 */
/* 5명의 자바 점수를 정수로 입력 받아서 합계와 평균을 실수로 구하는 프로그램을 만들어 보세요 */
/* 5명의 자바점수를 저장할 배열 할당 */
int[] scores = new int[5];
Scanner sc = new Scanner(System.in);
/* 반복문을 이용하여 배열 인덱스에 하나씩 접근해서 점수를 입력 받는다 */
for (int i=0; i < scores.length; i++) {
System.out.print((i +1) + "번 째 학생의 자바 점수를 입력해주세요 : ");
scores[i] = sc.nextInt(); //??
}
/* 합계와 평균을 구한다. */
double sum = 0.0;
double avg = 0.0;
/* 합계는 모든 인덱스의 값을 sum 변수에 누적해서 담아준다. */
/* 배열의 인덱스 범위를 넘어가는 호출을 했을경우 out of bounds exception 에러가 발생 */
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
//i <= scores.length;로 범위를 입력해선 안된다. 범위를 넘어가기에 에러발생
}
/* 평균은 합계를 구한 값에서 배열의 길이(갯수)로 나눈다. */
avg = sum / scores.length;
System.out.println("sum : " + sum);
System.out.println("avg : " + avg);
/* 콘솔창
1번 째 학생의 자바 점수를 입력해주세요 : 100
2번 째 학생의 자바 점수를 입력해주세요 : 90
3번 째 학생의 자바 점수를 입력해주세요 : 80
4번 째 학생의 자바 점수를 입력해주세요 : 70
5번 째 학생의 자바 점수를 입력해주세요 : 60
sum : 400.0
avg : 80.0
*/
}
}
public class Application5 {
public static void main(String[] args) {
/* 랜덤한 카드를 한장 뽑아서 출력해보자 */
/* 먼저 모양과 카드 숫자별로 값을 저장할 두 종류의 배열을 만들자 */
String[] shapes = {"SPADE", "CLOVER", "HEART", "DIAMOND"};
String[] cardNumbers = {"2", "3", "4", "5", "6", "7", "8",
"9", "10", "JACK", "QUEEN", "KING", "ACE"};
/* 배열 인덱스 범위의 난수발생 */
int randomShapeIndex = (int)(Math.random() * shapes.length);
int randomCardNumbers = (int)(Math.random() * cardNumbers.length);
System.out.println("당신이 뽑은 카드는 " + shapes[randomShapeIndex] + " "
+ cardNumbers[randomCardNumbers] + "카드입니다.");
}
}
2차원 배열
2차원 배열은 1차원 배열들의 묶음
- 자료형이 같은 1차원 배열들의 묶음
- 2차원 배열은 할당 된 공간 마다 인덱스 번호 두 개 부여 (앞 번호는 행, 뒷 번호는 열)
2차원 배열 선언과 할당
배열 선언
1) 자료형[ ][ ] 배열명;
2) 자료형 배열명[ ][ ];
3) 자료형[ ] 배열명[ ];
배열 할당
자료형[ ][ ] 배열명 = new 자료형[행크기][열크기];
배열의 선언과 할당
자료형[ ][ ] 배열명 = new 자료형[행크기][열크기];
자료형 배열명[ ][ ] = new 자료형[행크기][열크기];
자료형[ ] 배열명[ ] = new 자료형[행크기][열크기];
- 인덱스는 0부터 시작한다.
- 첫번째 칸이 행에 해당, 두번째 칸이 열에 해당
- 선언은 [4][4]로 하지만 그 인덱스가 가질 수 있는 가장 마지막 배열은 [3][3]이 된다.
2차원 배열 구조
- int[ ][ ] arr = new int[2][4];
- 2차원 배열은 각각의 1차원 배열을 묶어서 저장해주어야 하기 때문에 하나의 공간이 더 생긴다.
- 그 하나의 공간(0x123)은 1차원 배열을(0x678) 참조하고 있는 또하나의 참조변수이다.
2차원 배열 초기화
- 인덱스를 이용한 초기화
- for문을 이용한 초기화
- 반복문이 중첩되어야 행과 열에 해당하는 인덱스에대한 처리를 할 수 있다.
- 행에대한 부분은 외부 for 문으로, 열에대한 부분은 내부 for문으로
- 선언과 동시에 초기화
- 'arr[1][1] 은 6에 해당한다' 등으로 알아볼 수 있다.
public class Application1 {
public static void main(String[] args) {
/* 다차원 배열
* 다차원 배열은 2차원 이상의 배열을 의미한다.
* 배열의 인덱스마다또 다른 배열의 주소를 보관하는 배열을 의미한다.
* 즉, 2차원 배열은 1차원 배열 여러개를 하나로 묶어서 관리하는 배열을 의미한다.
* 더 많은 차원의 배열을 사용할 수 있지만 일반적으로 2차원 배열보다 더 높은 차원의 배열은 사용 빈도가 현저히 적다.
* */
/* 1. 배열의 주소를 보관할 레퍼런스 변수 선언(stack) */
int[][] iarr1;
int iarr2[][];
int[] iarr3[];
/* 2. 여러개의 1차원 배열의 주소를 관리하는 배열을 생성(heap) */
/* heap에 공간을 할당할 때는 new연산자를 이용한다.
* 배열의 주소를 관리하는 배열의 길이는 앞 부분에 정수형으로 표하며 반드시 크기를 지정해주어야 한다. */
// iarr1 = new int[][]; //크기를 지정하지않으면 컴파일 에러 발생
// iarr1 = new int[][4];
//주소를 묶어서 관리할 배열의 크기를 지정하지않으면 에러 발생
// 다차원배열에서 참조변수 두개가 있는데 그 중 가운데 참조배열을 선언하지 않은 것과 마찬가지이다.
iarr1 = new int[3][];
/* 3. 주소를 관리하는 배열의 인덱스마다 배열을 할당한다(heap) */
iarr1[0] = new int[5];
iarr1[1] = new int[5];
iarr1[2] = new int[5];
/* 참고 : 위에서 진행한 2,3번을 동시에 진행 할 수도 있다.
* 앞 부분 정수는 주소를 관리하는 배열의 크기, 뒷부분 정수는 각 인덱스에 할당하는 배열의 길이이다.
* 관리하는 여러개의 배열의 길이가 동일한 경우 아래와 같이 한번에 할당할 수도 있다.
* 하지만 여러개의 배열의 길이가 각각 다른경우 위에서 했던 방식처럼 인덱스별로 배열을 따로 할당해 주어야 한다.
* 서로 같은 길이의 여러개 배열을 하나로 묶어 관리하는 2차원 배열을 "정변배열"이라고 하며,
* 서로 길이가 같지않은 여러개의 배열을 하나로 묶어 관리하는 2차원 배열을 "가변배열"이라고 한다.
* */
iarr2 = new int[3][5];
/* 4. 각 배열의 인덱스에 차례로 접근해서 값 출력 */
/* 할당 후에 아무 값을 대입하지 않아도 heap 영역에는 값이 없는 상태로
* 공간을 생성할 수 없기 때문에 기본 값이 들어있다. */
/* 4-1. 배열 하나씩 접근해서 출력하기 */
/* 0번 인덱스의 배열 값 출력 */
for (int i = 0; i < iarr1[0].length; i++) {
System.out.print(iarr1[0][i] + " ");
} //0 0 0 0 0 출력
System.out.println();
/* 1번 인덱스의 배열 값 출력 */
for (int i = 0; i < iarr1[1].length; i++) {
System.out.print(iarr1[1][i] + " ");
} // 0 0 0 0 0 출력
System.out.println();
/* 2번 인덱스의 값 출력 */
for (int i =0; i < iarr1[2].length; i++) {
System.out.print(iarr1[2][i] + " ");
}
System.out.println(); //위에가 print이므로 개행
/* 4-2. 중첩 for문을 이용해서 배열의 값 출력 */
for(int i =0; i < iarr1.length; i++) {
for (int j = 0; j < iarr1[i].length; j++) {
System.out.print(iarr1[i][j] + " ");
}
System.out.println();
}
// 콘솔창 출력
// 0 0 0 0 0
// 0 0 0 0 0
// 0 0 0 0 0
// 0 0 0 0 0
// 0 0 0 0 0
// 0 0 0 0 0
}
}
public class Application2 {
public static void main(String[] args) {
/* 2차원 정변 배열을 선언 및 할당하고 차례로 값을 대입해서 출력해보자 */
/* 1. 배열의 선언 및 할당
* 정변 배열의 경우 각 인덱스별 배열을 따로 할당할 수도 있지만
* 선언과 동시에 모든 배열을 할당할 수 있다.
* 자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][할당할 배열의 길이]
* */
int[][] iarr = new int[3][5];
// 길이 5의 배열을 3개 할당하고 그 주소를 묶어 관리하는 배열의 주소를 stack의 iarr에 저장한다.
/* 2. 각 배열의 인덱스에 접근해서 값 대입 후 출력 */
// 1 2 3 4 5
// 6 7 8 9 10
// 11 12 13 14 15
/* 배경에 저장하기 위한 하나씩 증가하는 값을 저장할 변수 */
int value = 1;
// 1을 대입한 이후는 가장 처음인 [0][0]의 시작이 1이기 때문이다.
// 그래야 순차적으로 2,3,4,5가 나오기 때문
/* 배열의 갯수만큼 반복적으로 접근하기 위한 용도의 반복문 */
for(int i = 0; i < iarr.length; i++) {
/* 하나의 배열의 0번부터 마지막 인덱스까지 차례로 접근해서 값을 대입하는 용도의 반복문 */
for(int j = 0; j < iarr[i].length; j++) {
iarr[i][j] = value++;
// 후위연산자 덕분에 대입을 먼저한 후 증가를 시킨 2값을 위로 돌려줄 수 있다.
// iarr을 통해서 행의 상태를 알 수 있고
// iarr[i]을 통해서 0번행을 기준으로 열의 상태를 알수있다.
}
}
/* 값 출력 */
for ( int i = 0; i < iarr.length; i++ ) {
for ( int j = 0; j < iarr[i].length; j++ ) {
System.out.print(iarr[i][j] + " "); //하나의 행은 같은 열에 출력
}
System.out.println(); //한 행이 끝나면 다음줄로 바뀜
}
// 1 2 3 4 5
// 6 7 8 9 10
// 11 12 13 14 15
}
}
public class Application3 {
public static void main(String[] args) {
/* 2차원 가변 배열을 선언 및 할당하고 차례로 값을 대입해서 출력해보자. */
/* 1. 배열의 선언 및 할당
* 가변 배열의 경우 각 인덱스별 배열을 따로 할당 해야 한다.
* 선언과 동시에 모든 배열을 할당할 수 없으며, 할당할 배열의 갯수만 지정하고 각 인덱스에 서로다른
* 길이의 배열을 따로 할당해야 한다.
* 자료형[][] 변수명 = new 자료형 [할당할 배열의 갯수][];
* 변수명[배열 인덱스] = new 자료형[배열의 길이]
* */
/* 1-1. 주소를 관리하는 배열의 주소를 보관하기 위한 변수 선언 */
int[][] iarr = new int[3][];
/* 1-2. 주소를 관리하는 배열의 각 인덱스마다 배열을 할당하여 주소값 대입 */
iarr[0] = new int[3];
// iarr[1] = new char[2]; //자료형이 다른 배열은 하나로 묶어서 관리할 수 없다.
iarr[1] = new int[2];
int[] arr = new int[5];
iarr[2] = arr; // 미리 할당해둔 배열을 이용해서도 활용할 수 있다.
// 레퍼런스변수는 주소값을 받는 변수이므로 주소값을 대입할시 똑같은 주소를 참조하는 셈이 된다.
/* 2. 각 배열의 인덱스마다 접근하여 값 대입 후 출력 */
/* 값대입 */
iarr[0][0] = 1;
iarr[0][1] = 2;
iarr[0][2] = 3;
// iarr[0][3] = 4;
// java.lang.ArrayIndexOutOfBoundsException 발생
// 존재하지 않는 인덱스에 접근하는 경우 발생하는 에러
iarr[1][0] = 4;
iarr[1][1] = 5;
iarr[2][0] = 6;
// iarr[2] = arr; 을 주석 처리후 이것을 작동하면 아래와같은 에러가 발생한다.
// java.lang.NullPointerException
iarr[2][0] = 6;
iarr[2][1] = 7;
iarr[2][2] = 8;
iarr[2][3] = 9;
iarr[2][4] = 10;
// iarr[3][0] = 11;
// 존재하지 않는 배열에 접근하는 경우게도 ArrayIndexOutOfBoundsException 발생
/* 가변 배열 역시 반복문을 이용해서 값을 대입하고 출력할 수 있다. */
/* 반복문을 이용한 값 대입 */
/* 배열 인덱스마다 저장할 값이 보관될 변수 선언 */
int value = 0;
/* 모든 배열에 순차적으로 접근하는 반복문 */
for( int i = 0; i < iarr.length; i++ ) { //행이몇개있냐에 따라 반복
/* 배열마다 인덱스에 차례로 접근하는 반복문 */
for (int j = 0; j < iarr[i].length; j++) {
iarr[i][j] = ++value;
}
}
/* 반복문을 이용한 값 출력 */
for ( int i = 0; i < iarr.length; i++ ) {
for (int j = 0; j < iarr[i].length; j++ ) {
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
}
}
/*
1 2 3
4 5
6 7 8 9 10 */
public class Application4 {
public static void main(String[] args) {
/* 2차원 배열도 할당과 동시에 기본값 외의 값으로 초기화 하고 싶은 경우 리터럴을 이용할 수 있다. */
/* 선언과 할당을 하며 초기화 */
/* 정변배열 */
int[][] iarr = { {1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15} };
/* 반복문을 이용한 값 출력 */
for (int i = 0; i < iarr.length; i++) {
for (int j = 0; j < iarr[i].length; j++) {
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
/*
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15 */
System.out.println();
/* 가변 배열 */
int[][] iarr2 = { {1,2,3}, {4,5,6,7}, {8,9,10,11,12} };
/* 반복문을 이용한 값 출력 */
for (int i = 0; i < iarr2.length; i++) {
for (int j = 0; j < iarr2[i].length; j++) {
System.out.print(iarr2[i][j] + " ");
}
System.out.println();
}
System.out.println();
/* 미리 할당한 배열을 이용한 방식 */
int[] arr1 = {1,2,3,4,5};
int[] arr2 = {6,7,8,9,10};
int [][] iarr3 = {arr1, arr2}; // 변수를 대입함으로서 값도 대입
/* 반복문을 이용한 값 출력 */
for ( int i = 0; i < iarr3.length; i++ ) {
for ( int j = 0; j < iarr3[i].length; j++ ) {
System.out.print(iarr3[i][j] + " ");
}
System.out.println();
}
/*
1 2 3 4 5
6 7 8 9 10
*/
}
}
'Programming > JAVA' 카테고리의 다른 글
클래스와 객체(2) (0) | 2021.12.29 |
---|---|
배열, 클래스와 객체 (0) | 2021.12.28 |
반복문 (0) | 2021.12.24 |
스캐너와 조건문 (0) | 2021.12.23 |
메소드 (0) | 2021.12.22 |