day5 지금까지 배운 내용 정리 및 배열(선언, 초기화, 복사, 카피, 랜덤 초기화)

2023. 12. 14. 13:36자바 기초 및 세팅

변수 

- 변수를 선언할 수 있다.

 

연산자

- 연산자 종류를 알고 결과를 예측할 수 있다.

int score = 100;

score < 90 && score

 

조건문

- 조건문 종류를 알고, 조건문을 사용 할 수 있다.

~하면 ...한다.

 

반복문

- 규칙적인 작업을 반복적으로 할 때 반복문을 사용할 수 있다.

 

 

배열이란?

 

자료형이 같은 변수들을 모아 놓은 것.

사용하는 이유?

  • 관리가 편하다. 변수 100개 관리하는 것보다 크기가 100인 배열 1개를 관리하는게 편하다.
  • 반복문을 이용하여 코드를 효율적으로 작업할 수 있다.
  • 연속된 공간에 할당하기 때문에 탐색이 빠르다.

배열선언과 초기화

배열 선언

  • 자료형[] 배열명 = new 자료형[개수]; 
  • 자료형 배열명[] = new 자료형[개수];

배열 초기화

  • 다양한 방법이 있는데 잘 사용 안함.
  • 배열을 생성하면 따로 초기화를 하지 않아도 자료형에 맞게 초기화 됨(멤버변수처럼)

배열 사용하기

배열명[번지]를 이용하여 변수처럼 사용

번지는 0번지부터 배열의크기 - 1번지까지 사용 가능

잘못된 번지를 입력하면 ArrayIndexOutOfBounds 예외 발생

 

배열의 길이

배열명.length로 배열의 크기를 알 수 있음.

배열의 크기는 생성된 배열의 전체 크기이지 유효한 값이 들어있는 개수가 아님.

 

배열 예제 1

package day05;

import java.util.Scanner;

public class ArrayEx1 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		// 배열을 안쓸때
		int kor1, kor2, kor3, kor4, kor5; 
		kor1 = scan.nextInt();
		kor2 = scan.nextInt();
		kor3 = scan.nextInt();
		kor4 = scan.nextInt();
		kor5 = scan.nextInt();
		// 아래 반복문은 변수명에 숫자가 들어가서 i로
//		for (int i =0; i <=4; i++) {
//			kori = scan.nextInt();
//		}
		/*
		 * 학생 5명의 국어 성적을 저장하기 위한 배열
		 * */
		
		int[] korScores = new int[5];
//		korScores[0] = scan.nextInt();
//		korScores[1] = scan.nextInt();
//		korScores[2] = scan.nextInt();
//		korScores[3] = scan.nextInt();
//		korScores[4] = scan.nextInt();
		for (int i =0; i <=4; i++) {
			System.out.println("학생" + (i + 1) + " 성적 : ");
			korScores[i] = scan.nextInt();
		}
		
		for (int i =0; i <=4; i++) {
			System.out.println("학생" + (i + 1) + " 성적 : " + korScores [i]);
			korScores[i] = scan.nextInt();
		}

	}

}

 

 

배열의 길이

배열명.length로 배열의 크기를 알 수 있음.

배열의 크기는 생성된 배열의 전체 크기이지 유효한 값이 들어있는 개수가 아님.

 

배열 예제 2

package day05;

import java.util.Scanner;

public class ArrayScoreEx1 {

	public static void main(String[] args) {
		/*
		 * 학생 5명의 국어 성적을 입력 받고, 총점과 평균을 구하는 평균을 구하는 코드를 작성하시오
		 * */ 
		Scanner scan = new Scanner(System.in);
		
		int[] korScores = new int[5];
		int sum = 0;
		for (int i = 0; i < 5; i++) {
			System.out.print("학생 " + (i+1) + "의 점수 입력 : ");
			korScores[i] = scan.nextInt();
			sum +=korScores[i];
		}
		double avg = (double)sum / korScores.length;
		System.out.println("학생 5명의 총점 : " + sum + "평균 : " + avg);

	}

}

 

 

배열 복사하기

 

1. 반복문을 이용하여 직접 복사

2. System.arraycopy(src, srcPos, dest, destPos, length)를 이용하여 복사

  • 얕은 복사

배열 초기화 예제

package day05;

public class ArrayInitEx1 {

	public static void main(String[] args) {
		/*
		 * 
		 * */ 
		// arr1배열에는 0부터 4번까지 0으로 초기화가 됨
		// char는 \0, 정수는 0, 실수는 0.0, boolean는 false
		int arr1[] = new int[5];
		
		//arr2는 0번지에1, 1번지에 2, 2번지에 3, ...4번지에 5가 저장
		int arr2[] = new int[] {1, 2, 3, 4, 5};
		// arr2와 같음
		int arr3[] = {1, 2, 3, 4,5};
		//arr3 = {1, 2, 3, 4, 5}// 에러가 발생
	}

}

 

 

배열 카피예제

package day05;

import java.awt.SystemColor;

public class ArrayCopyEx1 {

	public static void main(String[] args) {
		// 배열 복사 예제
		
		int arr1 [] = new int[] {1, 2, 3, 4, 5};
		
		int arr2 [] = arr1;
		
		int arr3 [] = new int [arr1.length];
		
		int arr4 [] = new int [arr1.length];
		
		// 반복문을 이용하여 arr1에 있는 값들을 arr3에 복사
		for(int i = 0; i < arr1.length; i++) {
			arr3[i] = arr1[i];
		}
		
		//System.arraycopy를 이용하여 arr1을 arr4에 전체 복사
		System.arraycopy(arr1, 0, arr4, 0, arr1.length);
		
		//arr2의 0번지 내용이 10으로 출력되는걸 확인
		for(int i = 0; i < 5; i++) {
			System.out.print("arr2확인 : "+arr2[i]+"\n");
		}
		//arr3의 내용을 확인
		for(int i = 0; i < 5; i++) {
			System.out.print("arr3확인 : " + arr3[i]);
		}
		System.out.println("\n arr4 확인 : ");
		for(int i = 0; i < 5; i++) {
			System.out.print( arr4[i] + " ");
		}
		int arr5[] = new int [arr1.length];
		//arr1배얄에 1번지부터 2개를 복사해서 arr5배열에 0번지부터 덮어씀
		System.arraycopy(arr1, 1, arr5, 0, 2);
		System.out.println("\n arr5 확인 : ");
		for(int i = 0; i < 5; i++) {
			System.out.print( arr5[i] + " ");
		}
	}

}

 

 

배열 정렬 예제

 

package day05;

import java.util.Arrays;

public class ArraySortEx1 {

	public static void main(String[] args) {
		/*
		 * 배열 정렬 방법
		 * */
		//정렬 안된 배열 생성
		int arr[] = new int[] {1, 3, 5, 7, 2, 4, 6, 8};
		
		/*버블 정렬
		// 옆에 인접 한 값들을 비교하여 정렬하는 방식
		// 1 3 5 7 2 4 6 8
		 * 1 3 5 2 4 6 7 8
		 * 1 3 2 4 5 6 7 [8]
		 * 1 2 3 4 5 6 [7 8]
		 * */
		for(int i = 0; i < arr.length - 1; i++) {
			for(int j = 0; j<arr.length - 1; j++) {
				
				if(arr[j] > arr[j+1]) {
					int tmp = arr[j];
					arr[j] = arr[j+1]; 
					arr[j+1] = tmp;
				}
			}
		}
		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		
		System.out.println();
		
		int arr2[] = {1, 3, 5, 7, 9, 2, 4, 6, 8};
		// 오름차순으로 정렬
		Arrays.sort(arr2);
		
		for(int i = 0; i < arr2.length; i++) {
			System.out.print(arr2[i] + " ");
		}
		
		System.out.println();
		
	}

}