-
2-3차원배열,향상된for문JAVA 2021. 7. 21. 22:24
배열문
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package chapter3;public class Array {public static void main(String[] args) {ex1();test1();}// 배열의 기초public static void ex1() {int[] arr1 = new int[5];arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;arr1[3] = 4;arr1[4] = 5;for (int i = 0; i < arr1.length; i++) {System.out.print(arr1[i] + " ");}System.out.println();int[] arr2 = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };for (int i = 0; i < arr2.length; i++) {System.out.print(arr2[i] + " ");}System.out.println();int[] arr3 = new int[] { 4, 3, 2, 1 };for (int i = 0; i < arr3.length; i++) {System.out.print(arr3[i] + " ");}System.out.println();char carr[] = new char[5];carr[0] = 'A';carr[1] = 'B';for (int i = 0; i < carr.length; i++) {System.out.print(carr[i] + " ");}}}cs int[] arr1 = new int[5];
int[] arr2 = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int[] arr3 = new int[] { 4, 3, 2, 1 };
세가지 다 가능.
int arr1[] 와
int[] arr1 도 가능
향상된 for문
for (String s : strArr){}
's' 에 배열 strArr을 대입.
String 같은 참조 자료형만 들어갈 수 있다.
int 같은 기본 자료형은 들어갈 수 없다.
int 대신 integer이 들어갈 수 있음
12345678910// 향상된 for문public static void ex2() {String strArr[] = { "강아지", "고양이", "앵무세", };// for (int i = 0; i < strArr.length; i++) {}for (String s : strArr) {System.out.print(s + " ");}}cs + main함수의 String[] args의 'args 문자배열'은 어디에 쓰이는가?
- 주로 테스트용이다.
방법: 위에 실행 메뉴 --> Run Configurations... --> (x)=Arguments --> Program arguments 에 테스트할 문장 입력
ex) 유재석 강호동 아이유
12345public static void main(String[] args) {System.out.println(args[0]);System.out.println(args[1]);System.out.println(args[2]);}cs 실행시 arg[0]에 유재석, arg[1]에 강호동, arg[3]에 아이유가 나온다.
2차원 배열
int[][] arr2 = new int[3][4]
arr2[행][열]
arr[0][0] arr[0][1] arr[0][2] arr[0][3] arr[1][0] arr[1][1] arr[1][2] arr[1][3] arr[2][0] arr[2][1] arr[2][2] arr[2][3] 123456789101112131415161718192021// 2차원 배열public static void p1() {int[][] mArray = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };// mArray 2번째열 2번째행의 값을 출력하세요.System.out.println(mArray[1][1]);System.out.println();System.out.println("2차원 배열의 길이" + mArray.length);System.out.println("2차원 배열의 길이" + mArray[0].length);System.out.println("2차원 배열의 길이" + mArray[1].length);System.out.println("2차원 배열의 길이" + mArray[2].length);// 행의 개수for (int row = 0; row < mArray.length; row++) {//열의 개수for (int col = 0; col < mArray[row].length; col++) {System.out.print(mArray[row][col] + " ");}System.out.println();}}cs mArray = { {1행1열,1행2열,1행3열 } {2행1열,2행2열,2행3열 } {3행1열,3행2열,3행3열 } }
mArray.length =행의 갯수
mArray[0].length = 열의 갯수
2차원 배열은 중첩반복문으로 확인 및 출력할 수 있다.
비정방형 배열
arr[0][0] x x arr[1][0] arr[1][1] x arr[2][0] arr[2][1] arr[2][2] 12345678910111213141516171819202122// 2차원 배열(비정방향) : irregular multiArraypublic static void p2() {int[][] mArray = new int[3][];// 행은 꼭 써야 함, 열은 생략 가능// mArray[0] = {1,2,3}; 오류남mArray[0] = new int[] { 1 }; // new int[] 를 꼭 써서 대입 값 넣기.mArray[1] = new int[] { 2, 3 };mArray[2] = new int[] { 4, 5, 6 };System.out.println(mArray[0].length);System.out.println(mArray[1].length);System.out.println(mArray[2].length);System.out.println();// 행의 개수for (int row = 0; row < mArray.length; row++) {// 열의 개수for (int col = 0; col < mArray[row].length; col++) {System.out.print(mArray[row][col] + " ");}System.out.println();}}cs int[][] mArray = new int[3][];// 행은 꼭 써야 함, 열은 생략 가능
// mArray[0] = {1,2,3}; 오류남
mArray[0] = new int[] { 1 }; // new int[] 를 꼭 써서 대입 값 넣기.
마찬가지로 중첩반복문으로 확인 및 출력 가능
12345678910111213141516171819202122// 아파트 각층에 1호, 2호 : 10층// 각 층의 가족 수를 담을 10층 건물 배열 만들고// 각 층의 가족 수 합계, 아파트 전체의 가족 수의 합계 출력public static void p3() {int[][] aArray = { { 2, 2 }, { 4, 5 }, { 2, 5 }, { 6, 5 }, { 3, 4 }, { 4, 3 }, { 2, 5 }, { 5, 4 }, { 4, 3 },{ 3, 3 } };int rowTotal = 0;int total = 0;for (int i = 0; i < aArray.length; i++) {for (int j = 0; j < aArray[i].length; j++) {rowTotal += aArray[i][j];total += aArray[i][j];}System.out.print((i + 1) + "층의 가족수 합계: " + rowTotal);System.out.println();rowTotal = 0;}System.out.println("해당 아파트의 총 가족수 합계: " + total);}cs
배열의 복사
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556// 배열의 복사 방법 1,2,3public static void p4() {int[] arr1 = { 10, 20, 30, 40, 50 };// 방법1 : 반복문 사용int[] arr2;arr2 = new int[8];for (int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];}for (int i : arr2) {System.out.print(i + " ");}System.out.println();System.out.println("===========================");// 방법2 : System.arraycopy(arr1, 0, arr3, 0, 0);// System.arraycopy(복사해올 배열, 복사 시작 자리, 복사해놓을 배열, 복사 해놓는 자리, 복사 갯수);int[] arr3 = new int[8];System.arraycopy(arr1, 1, arr3, 0, 2);for (int i : arr3) {System.out.print(i + " ");}System.out.println();System.out.println("===========================");// 방법3 : Arrays.copyOf(null, 0)// Arrays 에 있는 copyOf라는 메서드// Arrays.copyOf(복사할 배열, 복사 갯수)int[] arr4 = null;arr4 = Arrays.copyOf(arr1, 5);for (int i : arr4) {System.out.print(i + " ");}}// 중첩 향상된 for문public static void p5() {int[][] mArray = { { 2, 2 }, { 4, 5 }, { 2, 5 }, { 6, 5 }, { 3, 4 }, { 4, 3 }, { 2, 5 }, { 5, 4 }, { 4, 3 },{ 3, 3 } };// 행의 개수 각행 mArray[]for (int[] row : mArray) {for (int col : row) {System.out.println(col + "/t"); //거꾸로 슬래시 뭐지..}System.out.println();}}cs 3차원 배열
int[][][] tMArray = new int[3][3][3];
tMArray[높이][행][열];
123456789101112131415161718192021222324252627// 3차원 배열public static void p6() {int[][][] tMArray = new int[4][3][2];int value = 0;// tMArray.length 높이 길이// tMArray[].length 행 길이// tMArray[][].length 열 길이for (int h = 0; h < tMArray.length; h++) {for (int r = 0; r < tMArray[h].length; r++) {for (int c = 0; c < tMArray[h][r].length; c++) {tMArray[h][r][c] = ++value;}}}for (int h = 0; h < tMArray.length; h++) {for (int r = 0; r < tMArray[h].length; r++) {for (int c = 0; c < tMArray[h][r].length; c++) {System.out.print(tMArray[h][r][c] + "t");System.out.print(" ");}System.out.println();}}}cs
로또번호 생성기 1~45
123456789101112131415161718192021222324252627282930313233public static void p7() {// 난수 만들기// int randomNo = Math.random();// ramdom은 소수점으로 나온다. 0~1 사이의 수이니 * 45를 하면됨// 하지만 정확히 1은 없으니 45가 나올려면 +1 을 해줘야 헤준다.int randomNo = (int) (Math.random() * 45) + 1;int[] lotto = new int[6];// 반복문 사용하여 lotto번호 채우기(단, 중복은 안됨)for (int i = 0; i < 6;) {boolean isDup = false;// 중복여부randomNo = (int) (Math.random() * 45) + 1;for (int j = 0; j < lotto.length; j++) {if (lotto[j] == randomNo) {isDup = true;System.out.println(isDup);break;}}if (isDup == false) {lotto[i] = randomNo;i++;}}for (int no : lotto) {System.out.print(no + " ");}}cs 'JAVA' 카테고리의 다른 글
static main, 접근제한자, 싱글톤정의 (0) 2021.07.22 java 및 객체의 정의 (0) 2021.07.22 클래스,메서드정의 (0) 2021.07.21 배열,while,for문 (0) 2021.07.21 [java] 변수,변수형,연산자,if문 (0) 2021.07.21