Day7

DeokHun KIM·2022년 7월 7일
0

java

목록 보기
11/30

ArrayEx3

public class ArrayEx3 {

	public static void main(String[] args) {
		// 변수값 서로 교환하기
		int a = 100;
		int b = 200;
		System.out.println("a: " + a);
		System.out.println("b: " + b);
		
		int temp;
		temp = a; //a 값 복사본 만들기
		a = b;
		b = temp;
				
		System.out.println("---- 교환후 ----");
		System.out.println("a: " + a);
		System.out.println("b: " + b);
		System.out.println("temp: " + temp);
		System.out.println("================");
		//            0    1    2    3    4  :5개  (index) 마지막 인덱스는 항상 nums.length - 1이다
		int[] nums = {100, 200, 300, 400, 500, 600, 700};
		System.out.println("배열의 크기 : " + nums.length);
		
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + " ");
		}
		System.out.println();
		System.out.println("--------");
		printArray(nums);
		
		System.out.println("-----------------");
		//배열 데이터 중 첫번째와 마지막 맞교환
		//nums[0] <-> nums[4]
//		System.out.println("nums[0] <-> nums[4]교환");
//		temp = nums[0];   //첫번째 데이터
//		nums[0] = nums[nums.length - 1];  //마지막 데이터를 첫번째 데이터에 복사
//		nums[nums.length - 1] = temp;
//		printArray(nums);
//		
//		//nums[1] <-> nums[3]
//		System.out.println("nums[1] <-> nums[3]교환");
//		temp = nums[1];
//		nums[1] = nums[nums.length - 2];  //마지막 이전 데이터
//		nums[nums.length - 2] = temp;
//		printArray(nums);
		
		System.out.println("======================");
		//배열의 데이터 갯수와 관계없이 데이터를 뒤집는 로직 작성
		
		
		for (int i = 0; i < nums.length / 2; i++) {
			temp = nums[i];
			nums[i] = nums[nums.length - (i + 1)]; 
			nums[nums.length - (i + 1)] = temp;
		}
		printArray(nums);
		
		
	}//main end
    
	//메소드 만들기 - 배열값 화면 출력
	static void printArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
	
	
}//class end

ArrayLotto

public static void main(String[] args) {
		// 배열에 저장된 숫자 정렬(오름차순 : ASC)
		//           0   1   2   3   4
		int[] num = {30, 20, 50, 10, 40};
		
		System.out.println(">>> 원본데이터");
		printData(num);
		
		System.out.println("---- 정렬 시작 ----");
		//첫번째 값 기준으로 비교작업
		//인덱스 0 - 인덱스 1
		if (num[0] > num[1]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[1];
			num[1] = temp;
		}
		printData(num);
		
		//인덱스 0 - 인덱스 2
		if (num[0] > num[2]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[2];
			num[2] = temp;
		}
		printData(num);
		
		//인덱스 0 - 인덱스 3
	    if (num[0] > num[3]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[3];
			num[3] = temp;
		}
		printData(num);
		
		System.out.println(">> 반복문으로 ");
		num = new int[] {30, 20, 50, 10, 40};
		System.out.println(">> 배열 변경전 데이터");
		printData(num);
		System.out.println("---첫번째 데이터 처리(인덱스: 0)---");
		//첫번째 값을 기준으로 정렬(인덱스: 0)
		for (int i = 1; i <= 4; i++) {
			if (num[0] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[0];
				num[0] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		
		System.out.println("---두번째 데이터 처리(인덱스: 1)---");
		for (int i = 2; i <= 4; i++) {
			if (num[1] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[1];
				num[1] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		System.out.println("---세번째 데이터 처리(인덱스: 2)---");
		for (int i = 3; i <= 4; i++) {
			if (num[2] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[2];
				num[2] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		System.out.println(">>> 정렬전");
		//    			  0   1   2   3   4
		num = new int[] {30, 20, 50, 10, 40};
		printData(num);
		
		for (int gijun = 0; gijun < (num.length - 1); gijun++) {
			//System.out.println(">> 기준 인덱스 : " + gijun);
			for (int i = (gijun + 1); i < num.length; i++) {
				if (num[gijun] > num[i]) { //비교하고 위치 바꾸기
					int temp = num[gijun];
					num[gijun] = num[i];
					num[i] = temp;
				}
				//printData(num);
			}
		}
		System.out.println(">>> 정렬후");
		printData(num);
		
		System.out.println("==== Arrays.sort() 사용 정렬 ====");
		num = new int[] {30, 20, 50, 10, 40};
		System.out.println(">>> 정렬전");
		printData(num);
		
		Arrays.sort(num);
		
		System.out.println(">>> 정렬후");
		printData(num);
		
		System.out.println("---------");
		num = new int[] {950, 120, 1110, 450, 337, 557, 782, 123, 1, 45, 88};
		System.out.println(">>> 정렬전");
		printData(num);
		
		Arrays.sort(num);
		
		System.out.println(">>> 정렬후");
		printData(num);
		
		
		
		
	}

	static void printData(int[] num) {
		for (int i = 0; i < num.length; i++) {
		System.out.print(num[i] + " ");
	}
	System.out.println();
		
	}
}

ArraySelctionSort

public static void main(String[] args) {
		// 배열에 저장된 숫자 정렬(오름차순 : ASC)
		//           0   1   2   3   4
		int[] num = {30, 20, 50, 10, 40};
		
		System.out.println(">>> 원본데이터");
		printData(num);
		
		System.out.println("---- 정렬 시작 ----");
		//첫번째 값 기준으로 비교작업
		//인덱스 0 - 인덱스 1
		if (num[0] > num[1]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[1];
			num[1] = temp;
		}
		printData(num);
		
		//인덱스 0 - 인덱스 2
		if (num[0] > num[2]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[2];
			num[2] = temp;
		}
		printData(num);
		
		//인덱스 0 - 인덱스 3
	    if (num[0] > num[3]) { //비교하고 위치 바꾸기
			int temp = num[0];
			num[0] = num[3];
			num[3] = temp;
		}
		printData(num);
		
		System.out.println(">> 반복문으로 ");
		num = new int[] {30, 20, 50, 10, 40};
		System.out.println(">> 배열 변경전 데이터");
		printData(num);
		System.out.println("---첫번째 데이터 처리(인덱스: 0)---");
		//첫번째 값을 기준으로 정렬(인덱스: 0)
		for (int i = 1; i <= 4; i++) {
			if (num[0] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[0];
				num[0] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		
		System.out.println("---두번째 데이터 처리(인덱스: 1)---");
		for (int i = 2; i <= 4; i++) {
			if (num[1] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[1];
				num[1] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		System.out.println("---세번째 데이터 처리(인덱스: 2)---");
		for (int i = 3; i <= 4; i++) {
			if (num[2] > num[i]) { //비교하고 위치 바꾸기
				int temp = num[2];
				num[2] = num[i];
				num[i] = temp;
			}
			printData(num);
		}
		
		System.out.println(">>> 정렬전");
		//    			  0   1   2   3   4
		num = new int[] {30, 20, 50, 10, 40};
		printData(num);
		
		for (int gijun = 0; gijun < (num.length - 1); gijun++) {
			//System.out.println(">> 기준 인덱스 : " + gijun);
			for (int i = (gijun + 1); i < num.length; i++) {
				if (num[gijun] > num[i]) { //비교하고 위치 바꾸기
					int temp = num[gijun];
					num[gijun] = num[i];
					num[i] = temp;
				}
				//printData(num);
			}
		}
		System.out.println(">>> 정렬후");
		printData(num);
		
		System.out.println("==== Arrays.sort() 사용 정렬 ====");
		num = new int[] {30, 20, 50, 10, 40};
		System.out.println(">>> 정렬전");
		printData(num);
		
		Arrays.sort(num);
		
		System.out.println(">>> 정렬후");
		printData(num);
		
		System.out.println("---------");
		num = new int[] {950, 120, 1110, 450, 337, 557, 782, 123, 1, 45, 88};
		System.out.println(">>> 정렬전");
		printData(num);
		
		Arrays.sort(num);
		
		System.out.println(">>> 정렬후");
		printData(num);

	}

	static void printData(int[] num) {
		for (int i = 0; i < num.length; i++) {
		System.out.print(num[i] + " ");
	}
	System.out.println();
		
	}
}
  • Arrays.sort( )를 사용하면 더 효율적이고 빠르게 정렬할수 있다.
  • 실무에서는 자바에서 제공하는 기능을 적극 사용

ArrayCopy

public class ArrayCopy {

	public static void main(String[] args) {
		// 배열 복사
		int [] num1 = new int[5];
		int [] num2 = new int[5];
		System.out.println("num1 : " + num1);
		System.out.println("num2 : " + num2);
        num1[0] = 10;
        num1[1] = 20;
        num1[2] = 30;
        num1[3] = 40;
        num1[4] = 50;
        
        printData("num1", num1);
        printData("num2", num2);
        
        System.out.println("=== 배열복사(주소값 복사/ 얕은복사) ===");
        //방법1 : 주소값 복사
        num2 = num1;
        num1[0] = 999;
        
        printData("num1", num1);
        printData("num2", num2);
        System.out.println("num1 : " + num1);
		System.out.println("num2 : " + num2);
        
		System.out.println("=== 배열복사(물리적 복사/ 깊은 복사) ===");
		int[] num3 = new int[5];
		System.out.println("num3 : " + num3);
		printData("num3", num3);
		
		// num3 <-- num1 데이터 복사
		for (int i = 0; i < num1.length; i++) {
			num3[i] = num1[i];
		} 
		System.out.println(">>> 복사후 num3 <-- num1");
		printData("num3", num3);
		System.out.println("num3 : " + num3);
		
		
		num1[0] = 888;
		System.out.println("--- num1[0] = 888 변경후");
		printData("num1", num1);
		printData("num2", num2);
		printData("num3", num3);
		
		num3[1] = 777;
		System.out.println("--- num3[0] = 777 변경후");
		printData("num1", num1);
		printData("num2", num2);
		printData("num3", num3);
		System.out.println("===========================");
		System.out.println("==== system.arraycopy() ====");
		int[] num4 = new int[num1.length];
		printData("num4", num4);
		
		//System.arraycopy(Object src, int srcPos, Object dest, int desPos, int length);
		//Sysyem.arraycopy(소스배열, 시작위치, 대상배열, 대상시작위치, 크기)
		System.arraycopy(num3, 0, num4, 0, num1.length);   //num3를 복사합니다. 처음부터. num4에 처음부터. 2개만
		System.out.println(">>> Sysyem.arraycopy() 복사후");
		printData("num4", num4);
		
		if (num3 == num4) {
			System.out.println("> 같은 객체(동일 주소값 참조)");
		} else {
			System.out.println("> 다른 객체(2개의 독립된 데이터)");
		}
		//===============================
		System.out.println("==== 배열객체.clone() 복사 ====");
		num4.clone();
		int[] num5 = num4.clone();
		printData("num4", num4);
		printData("num5", num5);
		System.out.println("num4 == num5 : " + (num4 == num5));
		System.out.println("num1 == num2 : " + (num1 == num2));
	

		
	}//main

	static void printData(int[] num) {
		for (int i = 0; i < num.length; i++) {
			System.out.print(num[i] + " ");
		}
		System.out.println();
	}
	
	//메소드 오버로딩(method overloading)
	static void printData(String name, int[] num) {
		System.out.print(name + " : ");
		for (int i = 0; i < num.length; i++) {
			System.out.print(num[i] + " ");
		}
		System.out.println();
	}
	
	
	
}//class

ArrayCopyExam

public static void main(String[] args) {
		/*(실습) 배열 값 변경 및 복사
		   문제 : int 타입의 데이터 3개를 저정할 수 있는 배열(num1)에
		   1. 10, 20, 30 숫자를 입력하고 화면출력
		   2. 세번째 데이터를 100으로 바꾸고 화면 출력
		   문제2 : num1 과 같은 크기의 배열 num1Copy 를 만들고 num1 데이터를 num1Copy에 복사하고 화면 출력
		   (주소값 복사인지 데이터 복사인지 확인)
		*/ 
		int[] num1 = new int[3];		
		num1[0] = 10;
		num1[1] = 20;
		num1[2] = 30;
		
		num1 = new int[] {10, 20, 30};
		System.out.println(Arrays.toString(num1));
		
		for (int i = 0; i < num1.length; i++) {
			System.out.print(num1[i] + " ");
		}
		System.out.println();
		
		//2. 세번째 데이터를 100으로 바꾸고 화면 출력
		num1[2] = 100;
		printData(num1);
		
		System.out.println("====== 문제2 배열복사 ======");
		int[] num1Copy = new int[num1.length];
		
		for (int i = 1; i < num1.length; i++) {
			num1Copy[i] = num1[i];
		}
		printData(num1Copy);
		System.out.println("num1 == num1Copy : " + (num1 == num1Copy));
		
		
		
		
	}//main end
		
		//메소드
		static void printData(int[] arr) {
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
		
	}

ArrayCopy

package com.mystudy.array4_copy;

import java.util.Arrays;

public class ArraysCopy {

	public static void main(String[] args) {
		int[] nums = {10, 11, 12, 13, 14};
		System.out.println("nums : " + nums);
		System.out.println(Arrays.toString(nums)); //문자열로 투스트링
		
		//Arrays.copyOf(int[] original, int newLength);
		int[] numsCopy = Arrays.copyOf(nums, nums.length);
		System.out.println("numsCopy : " + numsCopy);
		System.out.println(Arrays.toString(nums));
		
		if (nums == numsCopy) {  //동일 객체냐 ?
			System.out.println("> 복사본 동일객체(주소값 복사)");
		} else {
			System.out.println("> 복사본 새로운객체(독립된 데이터)");
		}
		System.out.println("=============");
		
		
		int[] numsCopyRange = Arrays.copyOfRange(nums, 0, 3); //0부터 3이전까지
		System.out.println("numsCopyRange : " + numsCopyRange);
		System.out.println(Arrays.toString(numsCopyRange));
		System.out.println("--------");
		
		numsCopyRange = Arrays.copyOfRange(nums, 1, 4); //1부터 4이전까지
		System.out.println("numsCopyRange : " + numsCopyRange);
		System.out.println(Arrays.toString(numsCopyRange));

	}
}

ArrayTwoDimension

	public static void main(String[] args) {
		// 2차원 배열 선언 및 객체 생성
		// 타입[][] 변수명 = new 타입[크기값][크기값];
		// 타입 변수명[][] = new 타입[크기값][크기값];
		// 타입[][] 변수명 = { {..}, {..}, ..., {..} };
		int[][] nums = { {10, 20}, //10: nums[0][0], 20:[0][1]
				         {30, 40}, //30: nums[1][0], 40:[1][1]
				         {50, 60}, //50: nums[2][0], 60:[2][1]
				         {70, 80},  //70: nums[3][0], 80:[3][1]
				         {90, 10},  
				         {100, 110}  
				       };
		System.out.println("nums : " + nums); //대괄호 [[ 2개 달려있다
		System.out.println("nums[0] : " + nums[0]);
		System.out.println("nums[0][0] : " + nums[0][0]);
		System.out.println("-----------");
		
		//배열에 있는 값을 모두 출력
		//{10, 20}
		System.out.print(nums[0][0] + " "); //0,0
		System.out.print(nums[0][1] + " "); //0,1
		System.out.println();
		
		//{30, 40}
		System.out.print(nums[1][0] + " "); //1,0
		System.out.print(nums[1][1] + " "); //1,1
		System.out.println();
		
		//{50, 60}
		System.out.print(nums[2][0] + " "); //2,0
		System.out.print(nums[2][1] + " "); //2,1
		System.out.println();
		
		System.out.println("----- for문으로 출력 -----");
		for (int i = 0; i < 2; i++) {
			System.out.print(nums[0][i] + " ");
			}
		System.out.println();
		
		for (int i = 0; i < 2; i++) {
			System.out.print(nums[1][i] + " ");
			}
		System.out.println();
		
		System.out.println("==== 이중 for문으로 출력 ====");
		System.out.println("nums.length : " + nums.length);
		System.out.println("nums[0].length : " + nums[0].length);
		System.out.println("nums[1].length : " + nums[1].length);
		
		for (int k = 0; k < nums.length; k++) {
			for (int i = 0; i < nums[k].length; i++) {
				System.out.print(nums[k][i] + " ");
			}
			System.out.println();
		}
		System.out.println("=====================");
	
		
		System.out.println(Arrays.deepToString(nums));
		
		
	}

0개의 댓글