관리 메뉴

거니의 velog

230712 자바 강의 본문

대덕인재개발원/대덕인재개발원_Java

230712 자바 강의

Unlimited00 2023. 7. 12. 20:26

[배열]

 

(1) 선언 => 타입명[ ] 배열명;

- 배열선언타입 대로만 배열요소로 값을 입력받을 수 있다.

  int[] score;

- 배열요소 => 배열명[인덱스], “일반변수이다.

  score[0] = 100; 값 배정 가능.

 

(2) 생성 => 타입명[] 배열명 = new 타입명[크기];

- 힙 메모리에 크기만큼의 공간을 생성하고 호출 스택 메모리에 배열명을 가리킴(주소값을 전달).

- int[] score = new int[10]; => 40 바이트 확보, 인덱스 0~9 배정.

- length. 배열 요소의 개수.

 

(3) 초기화 => 배열에 기본값 세팅해 주는 것.

- 배열요소 = ;

  score[0] = 10; score[1] = 50; score[2] = 70; ....

 

- 반복문 사용. 규칙적으로 변하는 값이나 똑같은 값을 저장할 때 사용.

 

- 배열타입명[] 배열명 = {데이터, 데이터, 데이터...};

  int[] score = {10, 30, 70, 90, 20};

 

- 타입명[] 배열명 = new 타입명[ '여기에 개수 쓰면 오류!' ]{데이터, 데이터, 데이터...};                                               

  int[] score = new int[]{10, 30, 70, 90, 20};


[향상된 for]

for(타입명 변수명 : 배열명 or 자바 컬렉션 프레임워크 객체[리스트류]) {

      반복문

}

같은 타입으로 맞춰줘야 함. 배열의 값을 꺼내 변수에 넣어주면서 반복 실행.


[ArrayExample.java]

package ddit.chap05.sec01;

import java.util.Arrays;

public class ArrayExample {

	public static void main(String[] args) {
		
		int[] num = null; // 배열 선언.
		System.out.println("num = " + num); // num = null
		
		num = new int[5]; // 배열 생성.
		System.out.println("num = " + num); // num = [I@32d992b2. 16진수 형태의 4바이트 표현 주소 출력. 참조형 변수.
		
		num[0] = 50;
		num[1] = 20;
		num[2] = 90;
		num[3] = 80;
		num[4] = 60;
		
		System.out.println("num = " + Arrays.toString(num)); // num = [50, 20, 90, 80, 60]
		
		// 향상된 for문(Enhanced for), 배열이나 컬렉션 프레임워크(리스트류)
		for(int a : num) {
			System.out.printf("%3d", a); // 50 20 90 80 60
		}
		
		System.out.println();
		
//		for(int i=0; i<=num.length; i++) { // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
		for(int i=0; i<num.length; i++) {
			System.out.printf("%3d", num[i]); // 50 20 90 80 60 
		}
		
	}

}

[ArrayExample02.java]

package ddit.chap05.sec01;

public class ArrayExample02 {

	public static void main(String[] args) {
		
		// 5명의 친구 이름을 배열로 저장(name)하고 3번째 저장된 친구 이름을 출력.
		
//		String[] name = new String[5]; // 초기화
//		name[0] = "홍길동";
//		name[1] = "김태호";
//		name[2] = "장호리";
//		name[3] = "아이린";
//		name[4] = "정몽주";
		
//		String[] name = new String[]{"홍길동", "김태호", "장호리", "아이린", "정몽주"};
		
		String[] name = {"홍길동", "김태호", "장호리", "아이린", "정몽주"};
		
		System.out.println("3번째 저장된 친구 이름 : " + name[2]); // 3(index : n-1)번째 저장된 친구 이름 : 장호리
		
	}

}

[ArrayExample03.java]

package ddit.chap05.sec01;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayExample03 {

	Scanner sc = new Scanner(System.in); // 멤버변수(필드)
	
	public static void main(String[] args) {
		
		// 정수배열 10개(score)를 선언하고 키보드를 통하여 입력된 값으로 초기화한 수
		// 최대값과 최소값을 구하시오.
		
		int[] num = new ArrayExample03().setData(); // 반환된 정수형 배열을 받기 위해 변수 타입도 정수형 배열로 선언.
		new ArrayExample03().getMaxMin(num); // 매개변수로 int[] num 을 가져가야 함.
		
	}
	
	public int[] setData() { // 정수형 배열 반환.
		int[] number = new int[10];
		for(int i=0; i<number.length; i++) {
//			System.out.print(i+1 + "번째 자료 입력 : ");
			System.out.print("number["+ i +"] = ");
			number[i] = Integer.parseInt(sc.nextLine());
		}
//		System.out.println("number : " + Arrays.toString(number));
		return number; // 나를 호출한 위치(main())에 값을 반환.
	}
	
	public void getMaxMin(int[] num) { // 매개변수 선언. 객체형 변수이므로 매개변수(int[] num)와 main() 변수(int[] num)의 주소가 틀리다(주의!)
		// 임시 최대값, 임시 최소값을 [배열의 첫 번째 요소]로 설정.
		int tmax = num[0]; // 임시 최대값
		int tmin = num[0]; // 임시 최소값
		
		for(int i=1; i<num.length; i++) {
			if(tmax<num[i]) tmax = num[i];
			if(tmin>num[i]) tmin = num[i];
		}
		
		System.out.println("원본 배열 : " + Arrays.toString(num));
		System.out.println("최대값 : " + tmax);
		System.out.println("최소값 : " + tmin);
	}

}

콘솔 결과


[ArrayExample04.java]

package ddit.chap05.sec01;

import java.util.Scanner;

public class ArrayExample04 {

	public static void main(String[] args) {
		
		// 키보드로 1000원 단위의 돈을 입력받아 그 액수 만큼의 로또번호를 출력하시오.
		int[] lotto = new int[45];
		for(int i=0; i<lotto.length; i++) {
			lotto[i] = i+1;
		}
//		System.out.println("lotto : " + Arrays.toString(lotto));
		
//		shuffle(lotto);
//		System.out.println("lotto(shuffle) : " + Arrays.toString(lotto));
		
		Scanner sc = new Scanner(System.in);
		System.out.print("구입액수(1000원 단위) : ");
		int money = sc.nextInt();
		
		getLottoNumber(lotto, money);
		
	}

	public static void shuffle(int[] lotto) {
		
		for(int i=0; i<100000000; i++) {
			int rand = (int)(Math.random()*lotto.length); // 0-44 사이의 난수.
			int temp = lotto[0];
			lotto[0] = lotto[rand];
			lotto[rand] = temp;
		}
		
	}
	
	public static void getLottoNumber(int[] lotto, int money) {
		
		for(int i=0; i<money/1000; i++) {
			shuffle(lotto);
			System.out.print(((i+1)*1000)+ "원 : ");
			for(int j=0; j<6; j++) {
				System.out.printf("[%2d]", lotto[j]);
			}
			System.out.println();
		}
		
	}

}

콘솔 결과


[Bubble Sort : n개로 구성된 배열]

(1) n-1 회전수행.

(2) 각 회전에서 인접된 두 자료 비교한 후 교환.

- descending : 내림차순. 큰 값에서 작은 값 순으로.

- ascending : 오름차순. 작은 값에서 큰 값 순으로. 기본값.

(3) 각 회전이 끝나면 가장 오른쪽에 있는 자료는 다음 비교 회전 대상에서 제외

 

27, 15, 38, 62, 7, 43 => 최소 5회전

[1회전] : 15, 27, 38, 7, 43 => 62 제외

[2회전] : 15, 27, 7, 38 => 43, 62 제외

[3회전] : 15, 7, 27 => 38, 43, 62 제외

[4회전] : 7, 15 => 27, 38, 43, 62 제외

[5회전] : 7 => 15, 27, 38, 43, 62 제외


[SortExample.java]

package ddit.chap05.sec02;

import java.util.Arrays;

public class SortExample {

	public static void main(String[] args) {
		
		BubbleSort bubbleSort = new BubbleSort();
		bubbleSort.sort(); // [정렬된 데이터] : [7, 15, 27, 38, 43, 50, 62, 65, 74, 80]
		
	}

}

class BubbleSort {
	// 멤버변수
	private int[] number;
	
	// 생성자(constructor). 멤버변수 초기화.
	BubbleSort() {
		number = new int[] {27, 15, 38, 62, 7, 43, 80, 65, 50, 74};
	}
	
	public void sort() {
		boolean flag = true;
		
		System.out.println("[원본 데이터]");
		System.out.println(Arrays.toString(number));
		
		for(int i=0; i<number.length-1; i++) { // n-1 회전수행
			flag = true; // 회전 시작시 true
			for(int j=0; j<number.length-1-i; j++) { // j=>8번 인덱스(j<number.length-1-i), j+1=>9번 인덱스
				if(number[j]>number[j+1]) {
					int temp = number[j];
					number[j] = number[j+1];
					number[j+1] = temp;
					flag = false; // 자리 바꿈이 한 번이라도 일어나면 false
				}
			}
			if(flag) break; // 자리 바꿈이 한 번도 일어나지 않았다면(flag = true;) 완료되었으므로 반복문을 빠져나와라.
		}
		
		System.out.println("[정렬된 데이터]");
		System.out.println(Arrays.toString(number));
	}
	
}

콘솔 결과

 

'대덕인재개발원 > 대덕인재개발원_Java' 카테고리의 다른 글

230714 자바 강의  (0) 2023.07.14
230713 자바 강의  (0) 2023.07.13
230711 자바 강의  (0) 2023.07.12
230710 자바 강의  (0) 2023.07.12
230707 자바 강의  (0) 2023.07.12