본문 바로가기
Java 공부 기록

배열(array)

by moonchance 2023. 6. 6.

 

[출처]자바의 정석

 

 

실습을 해보자.

	public static void main(String[] args) {
		/* 배열 : 같은 타입, 같은 의미를 가지는 변수들의 집합(참조변수)
		 * 일반적으로 객체 생성 키워드 => new
		 * 배열 선언 방법
		 * 타입[] 배열이름;  
		 * 타입 배열이름[];
		 * 선언 초기화 같이 하는 방법
		 * 타입[] 배열이름 = new 타입[길이]; // 가장 많이 사용
		 * 타입[] 배열이름 = new 타입[] {값1, 값2 .....}
		 * 타입[] 배열이름 = {값1, 값2......} // 연습할 때 선언과 동시에 초기화 가능
		 * -배열의 길이는 0이상이여야 한다.
		 * -배열[5] => 0 1 2 3 4
		 * -배열의 길이 확인 => 배열이름.length 를 이용
		 */
		
		int a = 10; // 지역 변수(일반 변수)
		int arr1[]; // 선언만 한 경우
		arr1 = new int[5]; // 초기화
		int arr2[] = new int[5];
		int[] arr3 = new int[] {1,2,3,4,5,};
		int[] arr4 = {1,2,3,4,5,};
		
		/* 배열 사용 이유
		 * 관리가 편함, 반복문 사용할 수 있기 때문에 많은 양의 데이터도 쉽게 사용 가능.
		 * 배열의 번지는 0부터 시작, 길이는 개수로 표현되기 때문에
		 * 길이가 5라고 할때 0 1 2 3 4
		 * 마지막 번지 길이-1 까지
		 */
		
		// 배열안의 값을 변경
		arr3[0] = 10;
		arr3[1] = 20;
		for (int i = 0; i < arr3.length; i++) {
			System.out.print(arr3[i] + " ");
		}
		System.out.println();
		System.out.println("-----------");
		
		// arr1 배열에 1 ~ 5까지의 값을 저장하고 출력
		for (int i = 0; i < arr1.length; i++) {
			arr1[i] = i + 1;
			System.out.print(arr1[i] + " ");
		}
		System.out.println();
		System.out.println(Arrays.toString(arr1));
		
	}

 

	public static void main(String[] args) {
		// 5개짜리 배열 생성 1 ~ 5까지의 값을 입력하고 출력
		int[] arr = new int[5];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
			System.out.printf("arr["+"%d"+"] = %-2d%n", arr[i], arr[i]);
		}
		/* 5명의 점수를 입력 받아서 배열에 저장하고,
		 * 점수의 합계와 평균을 출력
		 */
		Scanner scan = new Scanner(System.in);
		int[] student = new int[5];
		int sum = 0;
		System.out.println("5명의 점수를 입력 하세요.");
		for (int i = 0; i < student.length; i++) {
			student[i] = scan.nextInt();
			sum += student[i];
		}
		double avg = (double)sum / student.length;
		System.out.printf("5명 점수의 합계 : %d%n평균 : %.1f", sum, avg);
		
	}
	public static void main(String[] args) {
		int[] arr = new int[] {12, 15, 25, 60, 70, 88, 90};
		// arr 배열의 합계, 평균, 최대값, 최소값 출력
		
		int sum = 0;
		int max = arr[0];	
		int min = arr[0];
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
//			if (arr[i] > max) {
//				max = arr[i];
//			}
//			else {
//				min = arr[i];
//			}
			max = Math.max(max,arr[i]);
			min = Math.min(min,arr[i]);
		}
		double avg = (double)sum / arr.length;
		System.out.printf("합계 : %d%n평균 : %.1f%n최대값 : %d%n최소값 : %d%n",sum,avg,max,min);
		
		
	}
	public static void main(String[] args) {
		/*
		 * 10개짜리 배열 생성 후 1 ~ 50사이의 랜덤수를 생성한 후 배열에 저장 배열을 출력 합계, 평균, 최대, 최소 값을 출력
		 */
		int size = 10;
		int[] arr = new int[size];
		int sum = 0;
		int max = arr[0];
		int min = 50;
		System.out.println("1 ~ 50 까지의 랜덤수를 배열에 저장 하세요.");
		// 배열을 완성하는 중
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) (Math.random() * 50) + 1;
			System.out.printf("arr[" + "%d" + "]=%2d, ", i, arr[i]);
		}
		// 완성된 배열에서 합계, 최대값, 최소값 구하기
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
//			max = Math.max(max, arr[i]);
//			min = Math.min(min, arr[i]);
			if (max < arr[i]) {
				max = arr[i];
			}
			if (min > arr[i]) {
				min = arr[i];
			}
			System.out.println();
			double avg = (double) sum / arr.length;
			System.out.printf("합계 : %d%n평균 : %.1f%n최대값 : %d%n최소값 : %d%n", sum, avg, max, min);
		}
		
		
	}
	public static void main(String[] args) {
		/* 국어, 영어, 수학 이라는 단어를 담을 배열을 생성 후
		 * 글자를 입력 => 출력
		 */
		String[] arr = new String[3];
		arr[0] = "국어";
		arr[1] = "영어";
		arr[2] = "수학";
		
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		// 향상된 for문 (for each)
		// 한번에 하나씩 객체의 전체 탐색시 사용
		for (String str : arr) {
			System.out.print(str + " ");
		}
		
	}
	public static void main(String[] args) {
		/* 1 ~ 10까지 담고있는 배열을 생성 => 출력
		 */
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		
		/* 배열 섞는 코드
		 * 랜덤으로 번지를 선택해서 순차적으로 하나씩 교환
		 * int tmp = arr[i];
		 * arr[i] = arr[j];
		 * arr[j] = tmp;
		 * (int)(Math.random()*개수)+시작
		 * 범위를 min = 0, max = arr.length // 10개
		 * 범위로 나오면 min = 1, max = 15까지
		 */
		for (int i = 0; i < arr.length; i++) {
			int random = (int)(Math.random()*arr.length);
			int tmp = arr[i];
			arr[i] = arr[random];
			arr[random] = tmp;
		}
		System.out.println("--섞은 후--");
		for (int i : arr) {
			System.out.print(i + " ");
		}
		
		// 오름차순정렬 : 작은수부터 정렬
		// 내림차순정렬 : 큰수부터 정렬
		// 3 6 5 7 2 10 8 9 4 1 
		// 0번지를 뒤에 숫자랑 비교해서 더 작은수를 0번지로 교환 -1차
		// 1번지를 뒤에 숫자랑 비교해서 더 작은수를 1번지로 교환 -2차 
		// .....마지막 번지까지 비교해서 종료
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i] > arr[j]) { // 오름차순 반대는 < 내림차순
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		System.out.println();
		System.out.println("--정렬 후--");
		for (int i : arr) {
			System.out.print(i + " ");
		}
		
		
	}
	public static void main(String[] args) {
		/* 1 ~ 50까지의 랜덤수를 10개 생성하여 배열에 저장하고, 출력
		 * 오름차순 정렬하여 한번더 출력
		 */
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			int random = (int)(Math.random()*50)+1;
			arr[i] = random;
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		System.out.println("--오름차순정렬--");
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i] > arr[j]) { // 정렬 로직
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		for (int i : arr) {
			System.out.print(i + " ");
		}
		
		
	}
	public static void main(String[] args) {
		/* 1 ~ 45까지 숫자를 랜덤으로 6개 추출하는 로또번호 추출
		 * 오름차순 정렬 되도록 출력
		 */
		int[] arr = new int[6];
		for (int i = 0; i < arr.length; i++) { // 0번지 부터 끝번지까지 값을 저장
			arr[i] = (int)(Math.random()*45)+1;
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		System.out.println("----정렬 후----");
		
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if (arr[i] > arr[j]) { // 오름차순정렬
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
			
		}
		for (int i : arr) {
			System.out.print(i + " ");
		}
		
	}
	public static void main(String[] args) {
		/*
		 * 숫자를 입력받아 입력 받은 숫자를 거꾸로 출력 ex) 11456 => 65411 => 6+5+4+1+1 => 결과값 출력 힌트) /, %
		 * 이용
		 */
		Scanner scan = new Scanner(System.in);
		System.out.println("숫자를 입력 하세요.");
		long num = scan.nextLong();
		System.out.println("--------split으로 출력--------");
		String num1 = String.valueOf(num); // num을 문자열로 변경해서 num1에 저장
		String[] number = num1.split(""); // num1을 number 배열에 저장
		System.out.print("입력한 숫자 :");
		for (String i : number) {
			System.out.printf("[%s]", i); // number를 향상된 for문으로 출력
		}
		System.out.println();
		System.out.print("거꾸로 숫자 :");
		long sum = 0;
		for (int i = number.length-1; i >= 0; i--) {
			sum += Integer.parseInt(number[i]);
			System.out.printf("[%s]", number[i]);
			if (i > 0) {
				System.out.print("+");
			}
			else {
				System.out.print("=");
			}
		}
		System.out.println(" 총 합 : " + sum);
		
		System.out.println("--------정수 타입으로 출력--------");
		System.out.print("입력한 숫자 :" + num);
		System.out.println();
		System.out.print("거꾸로 숫자 :");
		long sum2 = 0;
		int cnt = 0;
		while (true) {
			long tmp = num % 10; // tmp에 나머지 값 저장
			num /= 10;           // num에 남은 몫 값 저장
			sum2 += tmp;          // sum에 나머지 값 합산
			System.out.printf("[%d]", tmp); // 나머지 값 출력
			if (num > 0) {
				System.out.print("+");
			}
			if (num == 0) { // 몫 값이 0이되면 탈출
				System.out.print("=");
				break;
			}
		}
		System.out.println(" 총 합 : "+ sum2);
		
		scan.close();
	}

multiArray(2차원배열)

	public static void main(String[] args) {
		/* 2차원 배열
		 * 자료형[][] 배열명 = new 자료형[길이][길이];
		 * 
		 */
		int[][] arr = new int[5][3]; // 행5, 열3
		int cnt = 1;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) { // i 행의 length
				arr[i][j] = cnt;
				cnt++;
				System.out.print(arr[i][j] + " ");
			}
			System.out.println(); // 행마다 줄바꿈
		}
		
		
	}

arrayCopy

	public static void main(String[] args) {
		/* 배열은 길이를 가지고 있음
		 * 한번 정해진 배열의 길이는 이후 추가 / 삭제 불가능
		 * 배열의 길이를 늘리거나 혹은 줄이거나 할 경우 배열 복사를 이용
		 * System.arraycopy(이전배열, 시작번지, 새배열, 시작번지, 개수)
		 */
		
		// 배열 복사를 이용하여 복사하는 경우
		int arr[] = new int[] {1, 2, 3, 4};
		int arr1[] = new int[10];
		
		for (int i = 0; i < arr.length; i++) {
			arr1[i] = arr[i]; // arr1로 arr의 값을 복사
		}
		System.out.println("--arr배열 출력--");
		for (int num : arr) {
			System.out.print(num + " ");
		}
		System.out.println();
		System.out.println("--arr1배열 출력--");
		for (int num : arr1) {
			System.out.print(num + " ");
		}
		
		int arr2[] = new int[arr.length*2];
		// arr => arr2 배열복사
		System.arraycopy(arr, 0, arr2, 0, arr.length);
		System.out.println();
		System.out.println("--arr2배열 출력--");
		for (int num : arr2) {
			System.out.print(num + " ");
		}
		
		
	}

'Java 공부 기록' 카테고리의 다른 글

지금까지 내용 요약 정리  (0) 2023.06.06
String 클래스, StringBuffer 클래스  (0) 2023.06.06
반복문(while, do while)  (0) 2023.06.06
break문, continue문  (0) 2023.06.06
반복문(for문)  (0) 2023.06.06