2021. 03. 26(금) TIL

Dylan·2021년 3월 26일
0

Java

배열 복습

// 복습
// 학과명을 저장하는 배열을 생성하기
// 학과명은 "컴퓨터공학과", "통계학과", "수학과", "전자공학과", "정보통신공학과"다
// 학과명 배열은 문자열 5개 저장하는 배열을 new 연산자를 사용해서 생성하고,
// 0번부터 4번까지 순서대로 학과명을 배열에 저장하기
String deptName[] = new String[5];
deptName[0] = "컴퓨터공학과";
deptName[1] = "통계학과";
deptName[2] = "수학과";
deptName[3] = "전자공학과";
deptName[4] = "정보통신공학과";

// 학생들의 이름을 저장하는 배열을 생성하기
// 학생명은 "이순신", "김유신", "강감찬", "유관순"이다.
// 학생명 배열은 배열표현식을 {값, 값, 값}을 사용해서 배열을 생성하기
String[] studentName = {"이순신", "김유신", "강감찬", "유관순"};

// 학생들의 학점을 저장하는 배열을 생성하기
// 학생들의 성적은 3.1, 3.0, 4.0, 4.3이다
// 학생성적 배열은 배열표현식을 사용해서 배열을 생성하기\
double[] credit = {3.1, 3.0, 4.0, 4.3};

// ### 배열의 값 출력하기
// 학과명 배열의 모든 값을  for문을 사용해서 화면에 출력하기
// 학생이름 배열의 모든 값을 향상된 for문을 사용해서 화면에 출력하기
// 학생성적 배열의 모든 값을 향상된 for문을 사용해서 화면에 출력하기
// 학생명 배열에서 0번째에 저장된 학생의 이름과, 학생성적 배열에서 0번째에 저장된 학생의 성적 출력하기
System.out.println("### 학과명 출력하기 ###");
for(int i = 0; i < deptName.length; i++) {
	System.out.println("학과명 : " + deptName[i]);
}
System.out.println("### 학생이름 출력하기 ###");
for(String x : studentName) {
	System.out.println("학생이름 : " + x);
}
System.out.println("### 학생성적 출력하기 ###");
for(double y : credit) {
	System.out.println("학생성적 : " + y);
}
System.out.println("### 지정된 위치의 값 출력하기");
System.out.println("0번째 학생이름 : " + studentName[0]);
System.out.println("0번째 학생성적 : " + credit[0]);

System.out.println("### 성적에 대한 총점과 평균 출력하기");
double totalScore = 0.0;
double avg = 0.0;
for(int i = 0; i < credit.length; i++) {
	totalScore += credit[i]*10;
}
totalScore /= 10;
avg = totalScore / credit.length;

System.out.println("총점 : " + totalScore);
System.out.println("평균 : " + avg);

최대, 최소값 구하기

int[] scores = {79, 88, 91, 100, 55, 95};

// 배열에 저장된 값을 대상으로 최소값, 최대값 구하기
int min = 100;	// 최소값을 구할 때는 해당값이 가질 수 있는 가장 큰 값을 초기값으로 지정한다.
int max = 0;	// 최대값을 구할 떄는 해당값이 가질 수 있는 가장 작은 값을 초기값으로 지정한다

// 최소값을 min에 저장된 값보다 배열에서 조회한 값이 더 작을 때만 min의 값을 배열값으로 바꾼다.
for (int score : scores) {
	if (score < min) {	// 최소값 구하기
		min = score;
	}
}
// 최대값은 min에 저장된 값보다 배열에서 조회한 값이 더 클때만 max의 값을 배열의 값으로 바꾼다.
for (int score : scores) {
	if (score > max) {	// 최대값 구하기
		max = score;
	}
}

System.out.println("최소값 : " + min);
System.out.println("최대값 : " + max);

로또 번호 만들기

// 난수를 활용해서 로또 번호 만들기
// 난수는 수행문이 실행될 때마다 생성되는 임의의 숫자다.
// 자바는 Math 클래스에 여러 가지 수학연산과 관련된 기능을 가지고 있고,
// 난수를 생성하는 기능도 가지고 있다.
// 난수 만들기 Math.random() 메소드를 사용해서 난수를 생성한다.
// 0 <= Math.random() < 1 난수의 범위다.


/*
 * 로또번호 생성하기
 * 1. 번호를 저장할 배열을 생성한다.
 * 2. 중복체크가 끝난 숫자를 배열의 몇번째 칸에 저장해야 하는지 그 위치를 기억하는 변수를 만든다
 * 
 * 3. while문을 사용해서 중복이 없는 로또번호가 만들어질 떄까지 무한반복한다.
 * 		1) position값이 6이면 탈출한다.
 * 		2) Math.random()을 이용해서 임의의 숫자(1 ~ 45)를 획득한다.
 * 		3) lotto 배열에 2번에서 획득한 숫자가 저장되어 있는지 여부를 조사한다.
 * 			a. lotto배열에 숫자가 존재하는지 여부를 담는 변수를 선언한다.(boolean 타입의 변수)
 * 			b. for문을 사용해서 lotto배열에 저장된 값을 순서대로 조회해서
 * 			c. 2)번에서 획득한 번호와 일치하는지 조사해 일치하면 숫자존재여부를 true로 설정한다.
 * 
 * 		4) 저장여부를 조사했을 때 false로 판정되면,
 *			a. 2)번에서 획득한 숫자를 lotto배열에 position이 가르치는 위치에 저장한다.
 *			b. position의 값을 1증가시킨다. (숫자가 배열에 저장될 떄만 position값이 증가됨)
 * 
 * 4. 로또 배열의 값을 오름차순으로 정렬한다
 * 5. 완성된 로또번호를 출력한다.
 */

int[] lotto = new int[6];							// 1.		로또용 배열 생성
int position = 0;									// 2.		중복여부 체크가 완료된 숫자가 저장될 위치를 기억하는 변수

while (true) {										// 3.		숫자 뽑기 무한 반복
	if (position == 6) {							// 1)		반복문 중지여부 결정
		break;
	}
	int number = (int) (Math.random()*45) + 1;		// 2)		난수 획득
	
													// 3) 		중복(존재)여부 조사
	boolean isExist = false;						// 3) - a
	for (int no : lotto) {							// 3) - b
		if (no == number) {							// 3) - c	
			isExist = true;
			break;
		}
	}
	
	if (!isExist) {									// 4)		중복여부체크가 완료된 숫자를 로또 배열에 저장
		lotto[position] = number;					// 4) - a
		position++;									// 4) - b
	}
	
}

Arrays.sort(lotto);									// 4
for (int x : lotto) {								// 5
	System.out.print(x + " ");
}

다차원 배열

/*
 * 다차원 배열
 * 		1차원 배열
 * 			int[] x = new int[3]
 * 			int[] x = {1, 2, 3, 4, 5}
 * 		2차원 배열
 * 			String[][] x = new String[2][3];
 * 			String[][] x = {{"김유신","강감찬","이순신"}, {"홍길동","임꺽정","장길산"}};
 * 
 * 				   0		 1		   2
 * 			  -------------------------------	
 * 			0ㅣ"김유신"ㅣ"강감찬"ㅣ"이순신"ㅣ
 * 			  -------------------------------
 * 			1ㅣ"홍길동"ㅣ"임꺽정"ㅣ"장길산"ㅣ
 * 			  -------------------------------
 */

// 다차원배열(2행 3열 다차원 배열) 생성하기
int[][] scores = {{70, 50, 80}, {100, 80, 10}};

// 다차원 배열의 값 출력하기
System.out.println(scores[0][0]);	// 70
System.out.println(scores[0][1]);	// 50
System.out.println(scores[0][2]);	// 80

System.out.println(scores[1][0]);	// 100
System.out.println(scores[1][1]);	// 80
System.out.println(scores[1][2]);	// 10

// for문을 사용해서 다차원 배열의 모든 값을 출력하기
for (int i = 0; i < scores.length; i++) {		// 행의 갯수
	for (int j = 0; j < scores[i].length; j++) {	// 열의 갯수
		System.out.print(scores[i][j] + " ");
	}
	System.out.println();
}

배열 예시

// 학생 성적 관리하기
/*
 * 학생들의 이름을 저장하는 1차원 배열이 있다.
 * 학생들의 국어, 영어, 수학 점수를 저장하는 2차원 배열이 있다.
 * 
 * ["김유신", "강감찬", "이순신", "홍길동"]
 * 
 * 국어		영어	수학 <--- 실제 배열에 저장되는 값은 아님
 * 100		100		100 <--- 김유신의 성적
 * 90		70		80 <--- 강감찬의 성적
 * 70		60		40 <--- 이순신의 성적
 * 100		80		90 <--- 홍길동의 성적
 */

String[] names = {"김유신", "강감찬", "이순신", "홍길동"};
//
int[][] scores = { {100, 100, 100},
				   {90, 70, 80}, 
				   {70, 60, 40}, 
				   {100, 80, 90} };

System.out.println("### 김유신 학생의 성적정보 출력하기");
for (int score : scores[0]) {
	System.out.printf("%5d", score);
}
System.out.println();

System.out.println("### 국어과목의 총점과 평균을 계산하고, 출력하기");
int korTotal = 0;
int korAverage = 0;
for (int[] row : scores) {
	korTotal += row[0];
}
korAverage = korTotal / scores.length;
System.out.println("국어과목 총점 : " + korTotal + ", 평균 : " + korAverage);


/*
 * ==== 학생 성적 정보 ==============================
 * 이름			국어	영어	수학	총점	평균
 * 김유신		100		100		100		300		100
 * 강감찬		90		70		80		240		80
 * 이순신		70		60		40		170		56
 * 홍길동		100		80		90		270		90
 * ---------------------------------------------------
 * 				360		310		310		
 * 				90		78		78
 */

System.out.println("====== 학생 성적 정보 ===================================");
System.out.printf("%6s%6s%6s%6s%6s%6s\n", "이름", "국어", "영어", "수학", "총점", "평균");
for (int i = 0; i < names.length; i++) {			// names 배열에 저장된 학생들의 수 만큼 반복작업
	int total = 0;									// 각 학생의 총점을 저장할 변수
	int average = 0;								// 각 학상의 평균을 저장할 변수
	
	String name = names[i];							// names배열에서 i번째 이름을 조회한다.
	System.out.printf("%6s", name);					// 조회된 학생이름을 출력한다
	
	int[] myScores = scores[i];						// 점수배열에서 i번째 행의 배열을 조회한다( 한 학생
	for (int score : myScores) {					// myScores배열에서 순서대로 국어, 영어, 수학점수
		total += score;								// total에 각 점수를 더한다
		System.out.printf("%7d", score);			// 각 점수를 화면에 출력한다
	}	
	average = total / 3;							// 평균을 계산한다
	System.out.printf("%7d%7d", total, average);	// 총점과 평균을 출력한다
	System.out.println();							// 줄바꿈 문자를 출력한다.
}
System.out.println("=========================================================");

0개의 댓글