정부지원 교육 5일차 – JAVA(배열)


국비 교육의 진행 상황을 개인이 기록하는 데 사용됩니다.

0321()

=> 배열



(교육)

package kr.s03.operation;
/*
 * (실습)
 * 생년월일을 입력하고 만 나이를 출력하는 프로그램을 작성하시오.
 * 만 나이 = (현재 연도 - 태어난 연도) - (생일이 지났으면 0, 생일이 지나지 않았으면 1)
 * 
 * (입력 예시)
 * 출생연도 입력: 2000
 * 월 입력:3
 * 일 입력: 12
 * 
 * (출력 예시)
 * 만 나이는 22
 */
public class TrainingMain {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		//현재 날짜 정보
		int thisYear = 2023;
		int thisMonth = 3;
		int thisDate = 21;
		
		System.out.print("출생연도 입력:");
		int birthYear = input.nextInt();
		System.out.print("월 입력:");
		int birthMonth = input.nextInt();
		System.out.print("일 입력:");
		int birthDate = input.nextInt();
		
		// 생일이 지나지 않았다 => 현재 날짜의 월, 일이 생일의 월, 일보다 작다 
		
		//현재 연도와 태어난 연도 연산
		int age = thisYear - birthYear;
		//현재 월과 태어난 월을 비교
		if(thisMonth < birthMonth) {
			age-=1;	//age--;
		}else if(thisMonth == birthMonth && thisDate < birthDate) {
		//현재 월과 태어난 월이 같으면 일 비교
			age-=1;	//age--;
		}
		//'else'는 생일이 지난 경우 이기 때문에 age의 변동이 없음. 그래서 else는 명시할 필요가 없음
		System.out.println("만 나이는 %d살%n" + age);
		input.close();
	}
}


– 준비

(배열 예시)

package kr.s04.array;

public class ArrayMain01 {
	public static void main(String() args) {
		char () ch;	//배열 선언
		ch = new char(4); //배열 생성
		
		//배열의 초기화
		ch(0) = 'J';
		ch(1) = 'A';
		ch(2) = 'V';
		ch(3) = 'A';
		//배열은 같은 자료형들 끼리 모아두는 것
		
		//배열의 요소 출력
		System.out.println(ch(0));
		System.out.println(ch(1));
		System.out.println(ch(2));
		System.out.println(ch(3));
		
		System.out.println("--------------------");
		
		//반복문을 이용한 배열의 요소 출력
//		for(int i = 0; i < 4; i++) {
//			System.out.println("ch(" + i + "): " + ch(i));
//		}
		//ch.length : 배열의 길이
		for(int i = 0; i < ch.length; i++) {
			System.out.println("ch(" + i + "): " + ch(i));
		}
		
		//배열의 선언 및 생성
		int() it = new int(6);
		
		//배열의 선언 및 생성(명시적 배열 생성) 초기화
		char() ch2 = new char() {'J', 'a', 'v', 'a'};	
			//방의 개수 자동으로 설정되므로 입력시 오류
		
		//배열의 선언 및 생성(암시적 배열 생성) 초기화
		char() ch3 = {'자', '바'};
	}
}

(배열 예시 – 요소 변경)

package kr.s04.array;

public class ArrayMain02 {
	public static void main(String() args) {
		//배열 선언 및 생성
		int() array = new int(5);
		//변수는 선언후 초기화 x시 데이터가 안들어가 있지만
		//배열에는 데이터가 들어가 있다 자료형(int:정수)의 기본값(0)으로 초기화 되어있다.
		
		for(int i=0; i < array.length; i++) {
			System.out.println("array(" + i + "): " + array(i));
		}
		
		System.out.println("---------------");
		
		//배열의 요소 변경
		array(0) = 10;
		array(1) = 20;
		array(2) = 30;
		array(3) = 40;
		array(4) = 50;
		
		//반복문을 이용한 배열의 요소 출력
		for(int i=0; i < array.length; i++) {
			System.out.println("array(" + i + "): " + array(i));
		}
	}
}

– 변수는 선언 후 초기화할 때 데이터를 포함하지 않지만 배열은 데이터를 포함합니다.

배열이 생성되면 데이터 유형의 기본값으로 초기화됩니다.

(배열 예시 – 총 점수, 평균)

package kr.s04.array;

public class ArrayMain03 {
	public static void main(String() args) {
		int sum = 0;	//총점을 저장하기 위한 변수
		float average = 0.0f;	//평균을 저장하기 위한 변수
		
		//배열 선언, 생성, 초기화
		int() score = {100, 88, 88, 100, 90};	//암시적 배열 생성
					//	0	 1	 2	 3	  4
					// length = 5
		//총점 구하기
		for(int i = 0; i < score.length; i++) {
			sum += score(i);
		}
		//평균 구하기
		average = sum / (float)score.length;
		
		//결과값 출력
		System.out.printf("총점 : %d%n", sum);
		System.out.printf("평균 : %.2f", average);
	}
}

(배열 예제 – 최소값과 최대값 찾기)

package kr.s04.array;

public class ArrayMain04 {
	public static void main(String() args) {
		//배열 선언, 생성, 초기화
		int() score = {78, 88, 91, 33, 100, 55, 95};
		
		//최대값, 최소값 구하기 기준값 설정(배열 내에 있는 값을 기준값으로)
		int max = score(0);	//배열의 첫번째 값으로 최대값을 초기화
		int min = score(0);	//배열의 첫번째 값으로 최소값을 초기화
		
		//기준값으로 배열의 첫번째 값을 사용했기때문에 index 0부터 시작할 필요x, 1부터 시작
		for(int i = 1; i < score.length; i++ ) {
			
			//최대값 구하기
			if(score(i) > max) {
				max = score(i);
			}
			//최소값 구하기
			if(score(i) < min) {
				min = score(i);	
			}
		}
		//최대값, 최소값 출력
		System.out.println("최대값은 : " + max);
		System.out.println("최소값은 : " + min);	
	}
}

(배열 예제 – 요소를 인쇄하는 방법)

package kr.s04.array;

public class ArrayMain05 {
	public static void main(String() args) {
		//배열 선언, 생성, 초기화
		int array() = {10, 20, 30, 40, 50};
		
		//배열의 요소 출력
		System.out.println(array(0));
		System.out.println(array(1));
		System.out.println(array(2));
		System.out.println(array(3));
		System.out.println(array(4));
		System.out.println("---------------");
		
		//반복문을 이용한 배열의 요소 출력
		for(int i = 0; i < array.length; i++) {
			System.out.println("array(" + i + "): " + array(i));
		}
		System.out.println("---------------");
		
		//개선된 루프(확장 for문)
		//		요소		배열
		for(int num : array) {
			System.out.println(num);
		}
	}
}


(배열 예시 – 문자열(객체의 배열))

package kr.s04.array;

public class ArrayMain06 {
	public static void main(String() args) {
		//문자열 배열 선언, 생성
		String() array = new String(3);
		
		//배열 요소 삽입
		array(0) = "Java";
		array(1) = "Array";
		array(2) = "HTML";
		
		//반복문을 이용한 배열의 요소 출력
		for(int i = 0; i < array.length; i++) {
			System.out.println(array(i));
		}
		
		System.out.println("--------------");
		//확장 for문을 이용한 배열의 요소 출력
		for(String str : array) {
			System.out.println(str);
		}
		
		//문자열 배열 선언, 생성(명시적 배열 생성), 초기화
		String() array2 = new String() {"서울", "부산"};
		
		//문자열 배열 선언, 생성(암시적 배열 생성), 초기화
		String() array3 = {"한국", "미국", "영국"};				
	}
}

(배열 예시 – 증언)

package kr.s04.array;

public class ArrayMain07 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		String() course = {"국어", "영어", "수학"};
		int() score = new int(course.length);	//0:국어, 1:영어, 3:수학
		int sum = 0;	//총점
		float avg = 0.0f;	//평균
		
		//반복문을 이용해서 입력 처리
		for(int i = 0; i < score.length; i++) {	//과목수 만큼 반복
			do {
				System.out.print(course(i) + "=");
				score(i) = input.nextInt();
			}while(score(i) < 0 || score(i) > 100);	//0이하 100이상의 값 입력시 다시 입력하도록
			//총점구하기
			sum += score(i);
		}
		//평균구하기
		avg = sum / (float)course.length;
		
		System.out.println();	//단순 줄바꿈
		
		//과목과 성적 출력
		for(int i = 0; i < score.length; i++) {
			System.out.printf("%s = %d%n", course(i), score(i));
		}
		System.out.printf("총점 = %d%n", sum);
		System.out.printf("평균 = %.2f", avg);	
		input.close();
	}
}

(배열 예시 – String() 인수)

package kr.s04.array;

public class ArrayMain08 {
	public static void main(String() args) {
		if(args.length > 0) {
			for(int i = 0; i < args.length; i++) {
				System.out.println(i + ": " + args(i));
			}
		}else {	//args.length == 0 의미, 전달된 데이터가 없음
			System.out.println("입력한 내용이 없습니다.");
		}
	}
}

실행 구성 선택하다 – 인수에 데이터 입력(인덱스 기반 공백, 공백이 있는 문자열의 경우 ” ” 사용)

args가 데이터를 전달하지 않으면 빈 배열이 생성됩니다.

args에 초기 값을 주고 싶을 때 사용되며, 그 외에는 거의 사용되지 않습니다.

(배열 예시 – 배열 데이터 타입 변경)

package kr.s04.array;

public class ArrayMain09 {
	public static void main(String() args) {
		//두 개의 정수를 전달한 후 + 연산
		System.out.println(args(0) + args(1));
		//외부에서 입력된 data의 자료형이 무엇이든 배열의 자료형인 문자열로 인식해
		//'+'이 연결의 의미로 사용됨
		System.out.println("---------------");
		
		//String -> int 변환
		int num = Integer.parseInt(args(0));	//문자열(내용:숫자) -> 정수형으로 변환, 사용빈도 높음
		int num2 = Integer.parseInt(args(1));
		
		System.out.println("합계 : " + (num + num2));
	}
}

(배열 – 운동)

package kr.s04.array;
/*
 * (실습)
 * 1) 10, 20, 30, 40, 50을 초기 값으로 갖는 1차원 배열을 
 * 	  test 라는 이름으로 선언, 생성, 초기화 하시오
 * 2) 반복문을 이용해서 출력하시오.
 * 3) 확장 for문을 이용해서 출력하시오
 * 4) 인덱스 3의 데이터를 100으로 변경하시오
 * 5)마지막 요소의 값을 200으로 면경하시오
 * 6)반복문을 사용하여 모든 요소의 값을 0으로 초기화 하시오
 * 7)홀수 인덱스에 10, 짝수 인덱스에 20을 저장
 * 8)모든 요소의 총합과 평균(총합을 요소의 수로 나눔)구하고 출력하시오.
 * 		(sum(총합), avg(평균))
 */
public class ArrayMain10 {
	public static void main(String() args) {
	
		System.out.println("<실습1~2>");
		
		//1)
		int() test = {10, 20, 30, 40, 50};	
		//int() test = new int() {10, 20, 30, 40, 50};
		
		//2)
		for(int i = 0; i < test.length; i++) {	
			System.out.println(test(i));
		}
		System.out.println("-------------------");
		
		//3)
		for(int p_test : test) {		
			System.out.println(p_test);
		}
		System.out.println("-------------------");
		
		//4)
		test(3) = 100;
		
		//5)
		test(test.length - 1) = 200; //length - 1 => 마지막 index
		
		for(int p_test : test) {		
			System.out.println(p_test);
		}
		System.out.println("-------------------");
		
		//6)
		for(int i = 0; i < test.length; i++) {	//(6)
			test(i) = 0;
			System.out.println(test(i));
		}
		System.out.println("-------------------");
	
		//7)
		for(int i = 0; i < test.length; i++) {	//(7)
			if(i % 2 == 1){	//홀수
				test(i) = 10;
			}else {	//짝수
				test(i) = 20;
			}
			System.out.println(test(i));
		}
		System.out.println("-------------------");
		
		//8)
		int sum = 0;
		int avg = 0;
		
		for(int i = 0; i < test.length; i++) {	//(8)
			//누적
			sum += test(i);
		}
		avg = sum / test.length;//요소의 수
		System.out.printf("총합 : %d, 평균 : %d", sum, avg);
	}
}

(연습 – 구구단 편)

package kr.s04.array;
/*
 * (실습)
 * 단을 입력 받아서 1~9까지 곱해서 값을 구하고
 * 배열에 그 값을 저장한 후 배열에 저장된 값을 읽어서 구구단 출력 형식(2*1=2)으로 출력하시오
 * 
 * (입력 예시)
 * 단 입력: 2
 * 
 * (출력 예시)
 * 2*1 = 2
 * 2*2 =4
 * ---
 * 2*9 = 18
 */
public class ArrayMain11 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
	
		System.out.print("단 입력 : ");
		int dan = input.nextInt();
		
		//배열 선언 및 생성
		int() result = new int(9);
		
		System.out.println(dan + "단");
		System.out.println("----------------");
		
		for(int i = 0; i < result.length; i++) {
			result(i) = dan * (i+1);
			System.out.println(dan + " * " + (i+1) + " = " + result(i));
		}
		input.close();
	}
}

– 2차원 배열

package kr.s04.array;

public class ArraySecondMain01 {
	public static void main(String() args) {
		//2차원 배열 선언
		int()() test;
		test = new int(2)(3);	//2행 3열
		test(0)(0) = 100;
		test(0)(1) = 200;
		test(0)(2) = 300;
		
		test(1)(0) = 400;
		test(1)(1) = 500;
		test(1)(2) = 600;
		
		//2차원 배열의 요소 출력
		System.out.println(test(0)(0));
		System.out.println(test(0)(1));
		System.out.println(test(0)(2));
		
		System.out.println(test(1)(0));
		System.out.println(test(1)(1));
		System.out.println(test(1)(2));
		System.out.println("---------------");
		
		//반복문을 이용한 요소의 출력
		for(int i = 0; i < test.length; i++) {	//i: 행번호
			for(int j = 0; j < test(i).length; j++) {	//j : 열번호
				System.out.println("test("+i+")("+j+"): " + test(i)(j));
			}
		}
	}
}