국비 교육의 진행 상황을 개인이 기록하는 데 사용됩니다.
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));
}
}
}
}