맞는데 왜 틀릴까..?

Java

[Java] 배열 (Array)

안도일 2022. 10. 22. 15:08
배열 선언

 

public class ArrayEx01 {

	public static void main(String[] args) {
		int arr1[] = new int[10];
		int[] arr2 = new int[20];
        
        	int arr3[];
        	arr3 = new int[30];
        
      	  	int arr4[][];
       	 	arr4 = new int[5][5];
		
	}
}

 

배열 출력 Array.toString(arr)

 

import java.util.Arrays;

public class ArrayEx02 { //배열 출력 Arrays.toString()

	public static void main(String[] args) {
		int arr[] = new int[5];
		
		for(int i=0; i<5; i++) 
			arr[i] = i;
		
		System.out.println(Arrays.toString(arr));
	}
}

 

 

배열 복사  System.arraycopy()

 

주로 2차원 배열에서 1차원 배열로 구조 변경 시, 또는 리스트 구조를 배열로 변경 시 사용

 

System.arraycopy( Object src, int srcPos, Object dest, int destPos, int length )

 

  • Object src: 복사 대상 (원본)
  • int srcPos: 읽어올 src의 위치
  • Object dest: 목표 대상(복사할 객체)
  • int destPos: 목표대상의 쓸 위치
  • int length: 원본으로부터 복사하는 데이터의 길이
import java.util.Arrays;

public class ArrayEx03 { //배열 복사 arraycopy()

	public static void main(String[] args) {
		int arr1[] = new int[5];
		int arr2[] = new int[5];
		
		for(int i=0; i<5; i++)
			arr1[i] = i;
		
		System.arraycopy(arr1, 0, arr2, 0, 5);
		System.out.println(Arrays.toString(arr2));
	}
}

 

 

배열 응용 문제

 

2차원 배열을 이용하여 숙박 프로그램을 만들어보자

 

public class ArrayEx04 {

	public static void main(String[] args) {
		int room[][] = new int[4][4];
		int operator = 0;
		int roomNumber = 0;
		boolean isExitProgram = false;
		
		Scanner scanner = new Scanner(System.in);
		
		final int ENTER_ROOM   = 1;
		final int EXIT_ROOM    = 2;
		final int SHOW_ROOM    = 3;
		final int EXIT_PROGRAM = 4;
		
		// 숙박실 개수 세기
		int roomCount = 0;
		
		// 배열 초기화 진행
		for(int i=0; i<4; i++) 
			room[0][i] = 0;
		// 초기화된 배열의 첫번째 원소를 복사하여
		// 나머지 원소에 복사 진행
		for(int i=1; i<4; i++) 
			System.arraycopy(room[0], 0, room[i], 0, 4);
		
		// 숙박실 개수 세기
		for(int i=0; i<4; i++) 
			roomCount += room[i].length;
		// 숙박실 개수 출력
		System.out.println("저희 호텔의 최대 숙박실 수는 " + roomCount + "입니다.");
		
		while(!isExitProgram) {
			System.out.println();
			System.out.println("1. 숙박");
			System.out.println("2. 퇴실");
			System.out.println("3. 조회");
			System.out.println("4. 종료");
			System.out.print("작업을 선택하시오(1~4):");
			operator = scanner.nextInt();
			
			switch(operator) {
			
			case ENTER_ROOM:
				System.out.print("숙박호실 입력:");
				roomNumber = scanner.nextInt();
				if(room[roomNumber/100-1][roomNumber%100-1]==1)
					System.out.println("이미 예약됨.");
				else room[roomNumber/100-1][roomNumber%100-1] = 1;
				break;
				
			case EXIT_ROOM:
				System.out.print("퇴실호실 입력:");
				roomNumber = scanner.nextInt();
				if(room[roomNumber/100-1][roomNumber%100-1]==0)
					System.out.println("빈방임.");
				else room[roomNumber/100-1][roomNumber%100-1] = 0;
				break;
				
			case SHOW_ROOM:
				for(int floor = 0; floor<4; floor++)
					System.out.println(Arrays.toString(room[floor]));
//				System.out.println("□ : 숙박가능, ■ : 숙박불가");
//				for(int floor=0; floor<4; floor++) {
//					for(int _room=0; _room<4; _room++) {
//						if(room[floor][_room] == 0)
//							System.out.print("□ ");
//						else System.out.print("■ ");							
//					}
//					System.out.println();
//				}
				break;
				
			case EXIT_PROGRAM:
				System.out.println("프로그램을 종료합니다.");
				isExitProgram = true;
				break;
			}			
		}
	}
}

 

'Java' 카테고리의 다른 글

[Java] Class  (0) 2022.10.22
[Java] String Buffer, Tokenizer, Scanner  (0) 2022.10.22
[Java] 생성자 (Constructor)  (0) 2022.10.22
[Java] Static  (0) 2022.10.22
[Java] 상속  (0) 2022.10.22