본문 바로가기
Programming Languages/Java

Chapter 14. 배열

by 더 이프 2023. 1. 13.
728x90

목차

    1. 배열

    ■ 배열이란?

    • 같은 타입의 데이터를 연속된 공간에 저장하는 자료 구조
    • 하나의 변수명으로 동일한 타입의 데이터를 여러개 저장하는 데이터 타입
    • 각 데이터 저장 위치는 인덱스를 부여하여 접근
    • 반복문을 이용해 배열 요소들을 쉽게 처리 가능
    • 배열 인덱스는 0번부터 시작함
    • 배열 선언 시 지정한 크기를 넘어서는 인덱스에는 접근 불가

     

    2. 예시

    ■ Array1

    package j12_배열;
    
    public class Array1 {
    
    	public static void main(String[] args) {
    
    		int num1 = 10;
    		int num2 = 20;
    		int num3 = 30;
    		int num4 = 40;
    		int num5 = 50;
    
    		System.out.println(num1);
    		System.out.println(num2);
    		System.out.println(num3);
    		System.out.println(num4);
    		System.out.println(num5);
            
    		// new가 들어가면 참조 자료형
    		int[] nums = new int[5]; 
    		nums[0] = 10;
    		nums[1] = 20;
    		nums[2] = 30;
    		nums[3] = 40;
    		nums[4] = 50;
    
    		for (int i = 0; i < 5; i++) {
    			System.out.println(nums[i]);
    		}
    
    	}
    
    }

    ■ Array2

    package j12_배열;
    
    public class Array2 {
    
    	public static void printNames(String[] names) {
    		for (int i = 0; i < names.length; i++) {
    			System.out.println("이름[" + (i + 1) + "] : " + names[i]);
    		}
    
    		System.out.println();
    	}
    
    	public static void main(String[] args) {
    		// 들어갈 값이 정해지지 않았을 때, 들어갈 공간이 확실할 경우
    		String[] names = new String[3];
    
    		names[0] = "김상현";
    		names[1] = "임나영";
    		names[2] = "김종환";
    
    		String[] names2 = new String[] { "이상현", "손지호", "이강용" };
    
    		String[] names3 = { "김두영", "강대협", "이현수", "김재영" };
    
    		printNames(names);
    		printNames(new String[] { "이상현", "손지호", "이강용" });
    		printNames(names3);
    	}
    
    }

    ■ Array3

    package j12_배열;
    
    import java.util.Iterator;
    import java.util.Random;
    
    public class Array3 {
    
    	public static void main(String[] args) {
    		Random random = new Random();
    
    		int[] nums = new int[10];
    		
    		// 무작위 랜덤
    		System.out.println(random.nextInt(10));
    
    		// 랜덤으로 뽑지만 숫자가 겹치지 않음
    		for (int i = 0; i < nums.length; i++) {
    			while (true) {
    				boolean findFlag = true;
    
    				int randomNum = random.nextInt(nums.length) + 1;
    
    				for (int j = 0; j < nums.length; j++) { // 순차 탐색
    					if (nums[j] == randomNum) {
    						findFlag = false;
    						break;
    					}
    				}
    
    				if (findFlag) {
    					nums[i] = randomNum;
    					break;
    				}
    			}
    		}
    
    		for (int i = 0; i < nums.length; i++) {
    			System.out.println(nums[i]);
    		}
    
    	}

    ■ Array4

    package j12_배열;
    
    public class Array4 {
    
    	public static void main(String[] args) {
    		J12_User[] users = new J12_User[3];
    		J12_User[] users2 = new J12_User[] { new J12_User("aaa", "1234", "김종환", "aaa@gmail.com"),
    				new J12_User("bbb", "1234", "이종현", "bbb@gmail.com"),
    				new J12_User("ccc", "1234", "진채희", "ccc@gmail.com") };
    
    		users[0] = new J12_User("aaa", "1234", "김종환", "aaa@gmail.com");
    		users[1] = new J12_User("bbb", "1234", "이종현", "aaa@gmail.com");
    		users[2] = new J12_User("ccc", "1234", "진채희", "aaa@gmail.com");
    
    		for (int i = 0; i < users.length; i++) {
    
    			System.out.println(users[i].toString());
    		}
    	}
    
    }

    ■ Array5

    package j12_배열;
    
    public class Array5 {
    
    	public static void transferArray(int[] oldArray, int[] newArray) {
    		for (int i = 0; i < oldArray.length; i++) {
    			newArray[i] = oldArray[i];
    		}
    	}
    
    	public static int[] addArrayLength(int[] array) {
    		int[] newArray = new int[array.length + 1];
    		transferArray(array, newArray);
    		return newArray;
    	}
    
    	// 메소드 명만 보고 기능을 판단할 수 있는 코드를 클린 코드임
    	public static int[] addData(int[] array, int data) {
    		int[] newArray = addArrayLength(array);
    		newArray[array.length] = data;
    		return newArray;
    	}
    
    	public static void main(String[] args) {
    
    		int[] nums = new int[0];
    
    		nums = addData(nums, 1);
    		nums = addData(nums, 2);
    		nums = addData(nums, 3);
    		nums = addData(nums, 4);
    		nums = addData(nums, 5);
    
    		for (int i = 0; i < nums.length; i++) {
    			System.out.println(nums[i]);
    		}
    	}
    
    }

    ■ Array6

    package j12_배열;
    
    public class Array6 {
    
    	public static void main(String[] args) {
    		String[] names = { "박성진", "조병철", "황창욱" };
    
    		// 값을 하나씩 꺼내는 구조라서 뒤돌아갈수 없음
            // for(변수 : 배열이나 리스트)
    		for (String name : names) {
    			System.out.println(name);
                 // 변수에다 넣은거지 배열에 넣은게 아님
    			name = "김준일";
    		}
    
    		System.out.println("========<forEach>========");
    
    		for (int i = 0; i < names.length; i++) {
    			System.out.println(names[i]);
    			names[i] = "김준일";
    		}
    
    		int[] nums = { 1, 2, 3, 4, 5 };
    
    		for (int i : nums) {
    			System.out.println("i : " + i);
    		}
    
    	}
    }

    ■ DoubleArray1

    package j12_배열;
    
    public class DoubleArray1 {
    
    	public static void main(String[] args) {
    		int num = 0;
            
    		// int를 담을 수 있는 배열
    		int[] nums = new int[2]; 
            
            // int 배열을 담을 수 있는 배열
            // 뒤가 더 하위
            // 2개짜리 배열이 3개로 묶인 것
    		int[][] d_nums = new int[3][2]; 
    
    		d_nums[0][0] = 1;
    		d_nums[0][1] = 4;
    
    		d_nums[1][0] = 2;
    		d_nums[1][1] = 5;
    
    		d_nums[2][0] = 3;
    		d_nums[2][1] = 6;
    
    		for (int i = 0; i < 2; i++) {
    			for (int j = 0; j < 3; j++) {
    				System.out.println(d_nums[j][i]);
    
    			}
    		}
    
    		int[][] d_nums2 = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } };
    
    		for (int i = 0; i < 2; i++) {
    			for (int j = 0; j < 3; j++) {
    				System.out.println(d_nums2[i][j]);
    
    			}
    		}
    
    		System.out.println(d_nums2.length);
            // 배열의 크기가 같을 경우
    		System.out.println(d_nums2[0].length);
    
    		int[][] d_nums3 = new int[][] { { 1, 2, 3 }, { 5, 6 } };
    
    		for (int i = 0; i < d_nums3.length; i++) {
    			for (int j = 0; j < d_nums3[i].length; j++) {
    				System.out.println(d_nums3[i][j]);
    			}
    		}
    	}
    
    }