Array (배열)

Liberte Koo·2022년 12월 6일

Java

목록 보기
9/13
post-thumbnail

배열

배열의 선언

int [] arr = new int[5]
▶ 길이가 5인 정수형 배열

배열의 구조

  • int 는 기본형인데
    int[] arr; 는 참조형

  • int[] arr = {1,2,3,4,5}
    길이가 5인 정수형 배열을 생성하면서 각 인덱스에 1,2,3,4,5 순서대로 저장

  • String[]arr={"hi","bye","hello"}
    길이가 3인 문자열 배열을 생성하면서 각 인덱스에 hi, bye, hello를 순서대로 저장

  • arr.length 를 잘 활용하자

딸기","복숭아","키위","사과","바나나"로 배열 출력하기

public void fruits() {
	String [] fruits = {"딸기","복숭아","키위","사과","바나나"};
	//혹은 아래와 같이 늘여써도 된다.
	String [] arr = new String[5];
	arr[0] = "딸기";
	arr[0] = "복숭아";
	arr[0] = "키위";
	arr[0] = "사과";
	arr[0] = "바나나";
	System.out.println("1-1.");
	System.out.println(fruits[4]); // 바나나만 출력
	System.out.println("1-2.for문 쓰지 않고 전체 출력");
	System.out.println(fruits[0]);
	System.out.println(fruits[1]);
	System.out.println(fruits[2]);
	System.out.println(fruits[3]);
	System.out.println(fruits[4]);
	System.out.println("1-3. for문 이용하고 전체 출력");
	for(int i=0; i<5; i++) {
		System.out.println(fruits[i]);
	}
}

1부터 100까지 배열 나열하기

public void array100() {
	int[]arr = new int[100]; //지금은 100 칸에 0 0 0 0 ... 이 들어있는 상태 
	for(int i=0; i<100; i++) {
		arr[i]= i+1;
	}
	for (int i=0; i<100; i++) {
		System.out.println(arr[i]);
	}
}

배열을 활용하여 과목별 점수를 입력해서 과목의 평균을 구하기

public void subjects() { //과목 i개와 함께 총 과목의 평균을 구하는 문제 
	Scanner sc = new Scanner(System.in);
	String[] subject = {"국어","영어","수학","과학"};
	// 배열이름.length -> 배열의 길이
	int[]arr = new int[subject.length+1]; // 평균값도 구해야하니까 length+1
	for(int i =0; i<subject.length;i++) {
		System.out.println(subject[i]+"점수 입력 :");
		arr[i] = sc.nextInt();
		arr[arr.length-1] += arr[i];
	}
	/*System.out.println("국어점수 입력 : ");
	sub[0] = sc.nextInt();
	System.out.println("영어점수 입력 : ");
	sub[1] = sc.nextInt();
	System.out.println("수학점수 입력 : ");
	sub[2] = sc.nextInt();
	sub[3] = sub[0]+ sub[1]+ sub[2];*/
	double avg = (double)arr[arr.length-1]/subject.length;
	for(int i=0; i<4; i++) {
		System.out.print(subject[i]+" : "+arr[i]+"\t");
	}
	System.out.print("합계 : "+arr[arr.length-1]+"\t");
	System.out.printf("평균 : %.2f",avg);
    

배열과 버블정렬을 이용하여 다섯 개의 입력한 숫자 오름차순으로 나열하기(array,tmp)

public void arraytest1() {
	Scanner sc = new Scanner(System.in);
	int [] arr = new int [5];
	for(int i=0; i <arr.length ; i++) {
	System.out.print((i+1)+"번째 숫자 입력 : ");
	arr[i] = sc.nextInt();
	}
	//버블정렬
	//배열0번째 값과 배열 1번째 값을 비교해서 비열 0번째가 더 크면 자리를 바꾸는 로직
	
	for (int i = 0; i<arr.length-1; i++) {//배열이 5개면 4개 비교 후 자리바꿈
		for(int j=0; j<arr.length-1-i; j++) {
			if(arr[j]> arr[j+1]) {
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;// 두 배열이 서로 1:1로 대입 자리바꾸려면 tmp가 있어야한다.
			}
		}
	}
	for(int i=0; i<arr.length; i++) {
		System.out.print(arr[i]+"\t");
	}
}

  • 버블 정렬
    1열부터 아래로 두 개의 숫자를 비교하면서 더 큰 수를 뒤로 보내준다. if arr[0]>arr[1] 경우, arr[0]에 arr[1]을 넣어주고 arr[1]에 arr[0]을 넣어준다. 그런데 이 때 두 값이 1:1로 넣어지지가 않으므로 tmp 임시 변수를 만들어주면서 바꿔나간다.
    그 다음으로 두번째로 내려가면 마지막 열에 5는 고정이고 또 바꿔주면 된다. 첫번째 과정보다 한 개 줄어들었다. 5가 고정이 되어있으므로.

호텔방 관리 프로그램

int 배열

import java.util.Scanner;

public class ArrayPractice {
public void hotel() {
	int[] rooms = new int[10]; // 10칸모두 0으로 세팅
	// 0이면 빈 방, 1이면 손님있는 방
	Scanner sc = new Scanner(System.in);
	boolean handler = true;
	while (handler) {
		System.out.println("-----호텔 관리 프로그램 v1.0-----");
		System.out.println("1. 입실   2.퇴실   3.방보기   4.종료");
		System.out.print("선택 > ");
		int menusel = sc.nextInt();
		
			if(menusel<1 || menusel>4) {
				System.out.println("다시입력");
				continue;
			}

			switch (menusel) {
			case 1:
				System.out.println("몇번방에 입실하시겠습니까?");
				int roomin = sc.nextInt();
				if (rooms[roomin - 1] == 0) {
					rooms[roomin - 1] = 1;
				} else {
					System.out.println(roomin + "번 방에는 이미 손님이 있습니다.");
				}
				break;// switch문을 나가서 while문으로 들어간다.
			case 2:
				menusel = 2;
				System.out.println("몇번방에서 퇴실하시겠습니까?");
				int roomout = sc.nextInt();
				if (rooms[roomout - 1] == 1) {
					rooms[roomout - 1] = 0;
				} else {
					System.out.println(roomout + "번 방은 이미 비어있습니다.");
				}
				break;
			case 3:
				for (int i = 0; i < rooms.length; i++) {
					if (rooms[i] == 0) {
						System.out.println((i + 1) + "번방이 현재 비어있습니다.");
					} else {
						System.out.println((i + 1) + "번 방에는 현재 손님이 있습니다.");
					}
				}
				break;// switch문을 나가서 while문으로 들어간다.
			case 4:
				handler = false; // 무한반복 해제될 수 있게
				System.out.println("종료");
				break;// switch문을 나가서 while문으로 들어간다.
			}// switch end
		} // while end
}// method end
} // class end

boolean 배열

같은 호텔방 관리를 boolean 논리형으로 코딩하면 아래와 같다.

public void hotel2() {
	Scanner sc = new Scanner(System.in);
	boolean[]rooms = new boolean[10];
	//false로 모두 세팅된 상태 
	//false면 빈 방, true면 손님있는 방
	boolean bool = true;//기능을 정지시키는 매개변수 
	while(bool) {
		System.out.println("-----------호텔관리프로그램--------------");
		System.out.println("1.입실   2.퇴실   3.방보기   4.종료");
		int sel = sc.nextInt();
		switch(sel) {
		case 1:
			System.out.println("몇번방에 입실하시겠습니까?");
			int enterNo = sc.nextInt();
			if(rooms[enterNo-1]) {
				//if(rooms[enterNo-1]==true){ 와 같은 말
				System.out.println(enterNo+"방에는 현재 손님이 있습니다.");
			}else {
				rooms[enterNo-1] = true;
			}
			break;
		case 2:
			System.out.println("몇번방에 퇴실하시겠습니까?");
			int exitNo = sc.nextInt();
			if(!rooms[exitNo-1]) {
				//if(rooms[exitNo-1]==false){ 와 같은 말
				System.out.println(exitNo+"방은 비어있습니다.");
			}else {
				rooms[exitNo-1] = false;
			}
			break;
		case 3:
			for(int i = 0; i<rooms.length;i++) {
				if(rooms[i]) { //if(true == true => true 이므로  rooms[i]=true라고 적어줄 필요없다.
					System.out.println((i+1)+"번 방에는 손님이 있습니다.");
				}else {
					System.out.println((i+1)+"번 방은 빈방입니다.");
				}
			}//배열 반복문 종료
			break;
		case 4:
			bool = false;
			System.out.println("Bye~");
			break;
		
		}//메뉴선택에 따른 switch end
	}// 젠처메뉴 반복 while(bool) end
} //method end
profile
A previous generalist who strives to become a genuine Specialist.

0개의 댓글