과목명 : 객체지향 프로그래밍(Object oriented programming)
수업일자 : 2022년 09월 28일 (수)
1. 조건문(Conditional statements)
1-1. 정의와 여러 가지 특징
- 프로그래밍에서 조건문이란 제어문(Control flow statements)의 한 종류로써, 주어진 조건식의 결과에 따라 프로그램의 수행 흐름을 바꾸고자 할 때 사용되는 구문입니다.
- 조건문에 명시된 조건식의 true, false 여부에 따라 달라지는 상황이나 연산을 수행할 수 있음에 따라 프로그램의 수행 로직에 변화를 줄 수 있다는 것이 큰 특징입니다.
- 조건식과 실행될 하나 또는 여러 구문들이 블럭 {}에 기재됩니다.
- 일반적으로 if 문을 사용하며 조건이 다수 많은 경우 switch 문을 사용하는 것도 고려해 볼 수 있습니다.
- Java의 조건문의 종류는 아래와 같습니다
(1) if
(2) if - else
(3) else if
(4) switch
1-2. if 문
- 간단한 형태의 조건문인 if 문이며 조건식의 결과에 따라 수행문의 구문이 실행됩니다.
- 문법 :
if (조건식) {
수행문1;
}
1-3. if - else 문
- if 문의 조건식의 결과가 true라면 if 문 내부의 수행문이 실행되고 false라면 else 문의 수행문이 실행됩니다.
- 문법 :
if (조건식) {
수행문 1;
} else {
수행문 2;
}
1-4. else if 문
- 다수의 조건이 존재하고 이를 판단하며 프로그램의 흐름을 바꿔줘야 할 때 주로 사용됩니다.
- 문법 :
if (조건식 1) {
수행문 1;
} else if (조건식 2) {
수행문 2;
} else if (조건식 3) {
수행문 3;
} else if (조건식 4) {
수행문 4;
}
...
} else {
수행문 n;
}
(2) else - if 문의 처리 로직
(1) 처음 if 문의 조건식이 true라면 if 문 내부의 수행문이 실행됩니다.
(2) 만약 if 문의 조건식이 false라면 두 번째 else-if 문의 조건식을 검사하여 true일 시, 두 번째 else if 문의 수행문이 실행되고 두 번째 else if 문의 조건식도 false라면 세 번째 else if 문으로 이동합니다.
(3) 세 번째 else if 문으로 이동하여 위의 로직으로 동일하게 수행합니다.
(4) 만약, 모든 else if 문의 조건식들이 false라면, 최종적으로 else 문의 수행문 n이 실행됩니다.
1-5. 예시 코드 확인
지금까지 알아본 조건문이 이용되는 예시 코드를 한 번 확인해 보겠습니다.
// 사용자로부터 점수를 입력받기 위해 scanner import
import java.util.Scanner;
public class ConditionalStatementsExample {
public static void main(String[] args) {
// 학생의 성적에 따라 등급을 산출하는 프로그램
// 학생의 성적을 저장할 변수 studentScore
int studentScore;
// 사용자로부터 입력을 받기 위한 scanner 객체 생성
Scanner inputScore = new Scanner(System.in);
// 3명의 학생에 대한 등급 평가
for (int count = 1; count <= 3; count++) {
// 학생 성적 입력받기
System.out.printf("성적을 입력하세요 : ");
studentScore= inputScore.nextInt();
if (studentScore >= 90) System.out.println("해당 학생의 등급은 A입니다.");
else if (studentScore >= 80) System.out.println("해당 학생의 등급은 B입니다.");
else if (studentScore >= 70) System.out.println("해당 학생의 등급은 C입니다.");
else if (studentScore >= 60) System.out.println("해당 학생의 등급은 D입니다.");
else System.out.println("해당 학생의 등급은 F입니다.");
}
}
}
< 실행 결과 >
1-6. 중첩 if 문
- if 문 내부에 또 다른 if 문을 추가할 수 있습니다.
- 위의 성적 산출 프로그램에서 특정 점수에 따라 등급을 세분화하는 코드를 작성해 보았습니다.
// 성적 등급을 더 세분화한 프로그램
import java.util.Scanner;
public class NestingIf {
public static void main(String[] args) {
// 중첩 if 문 example
// 학생의 점수 저장할 변수 선언 studentScore
int studentScore;
// 학생의 등급을 저장할 변수 studentGrade
String studentGrade;
Scanner inputScore = new Scanner(System.in);
for (int count = 1; count <= 3; count++) {
// 사용자로부터 점수를 입력받아 변수에 저장
System.out.printf("학생 점수를 입력하세요 : ");
studentScore = inputScore.nextInt();
// 중첩으로 if 문을 사용하여 세부 등급 나누기
if (studentScore >= 90) {
// 90점 이상일 경우 A 등급을 부여하나, 95점 이상이라면 A+를 준다.
studentGrade = "A";
if (studentScore >= 95) { studentGrade = "A+"; }
System.out.printf("해당 학생의 성적은 %s입니다.%n", studentGrade);
} else if (studentScore >= 80) {
// 80점 이상일 경우 B 등급을 부여하나, 85점 이상이라면 B+를 준다.
studentGrade = "B";
if (studentScore >= 85) { studentGrade = "B+"; }
System.out.printf("해당 학생의 성적은 %s입니다.%n", studentGrade);
} else if (studentScore >= 70) {
// 70점 이상일 경우 C 등급을 부여하나, 75점 이상이라면 C+를 준다.
studentGrade = "C";
if(studentScore >= 75) { studentGrade = "C+"; }
System.out.printf("해당 학생의 성적은 %s입니다.%n", studentGrade);
}
}
}
}
<실행 결과>
1-7. switch 문
- switch 문도 위의 if 문처럼 프로그램의 수행 로직을 변화시킬 있는 조건문입니다.
- 조건식 내부엔 int 타입의 정수형과, 문자열만 들어갈 수 있습니다.
- switch 문의 조건식과 일치하는 case 문으로 이동하여 break 문을 만날 때까지 case 문을 수행합니다.
- 일치하는 case 문이 없을 경우 최하단의 default 문으로 이동합니다.
- 문법 :
switch (조건식) {
case 값 1:
수행문 1;
break;
case 값 2:
수행문 2;
break;
...
default:
수행문 n;
break;
}
import java.util.Scanner;
public class SwitchExample {
public static void main(String[] args) {
int value;
Scanner input = new Scanner(System.in);
// 값을 입력받아 변수에 저장
System.out.printf("숫자를 입력하세요 : ");
value = input.nextInt();
switch (value) {
case 5:
System.out.printf("value = %d", value);
break;
case 4:
System.out.printf("value = %d", value);
break;
case 3:
System.out.printf("value = %d", value);
break;
case 2:
System.out.printf("value = %d", value);
break;
case 1:
System.out.printf("value = %d", value);
break;
default:
System.out.println("입력된 수는 정수 1~5 사이에 존재하지 않습니다.");
break;
}
}
}
<실행 결과>
2. 임의의 난수를 발생시키는 Math.random()
- 해당 메서드는 Math 클래스(Class)에 정의된 임의의 난수를 발생시키는 메서드입니다.
- 0.0과 1.0 사이의 난수를 반환합니다. (0.0 <= Math.random() < 1.0)
- 1.0 미만의 난수가 생성되는 점에 유의하여 사용합니다.
- 흔히 사용되는 정수 범위에서 난수를 발생시키고자 하는 경우 아래와 같이 코드를 작성합니다.
- n 이상 m 미만의 정수 출력하기 : (int) (Math.random() * m - n) + n;
public class MathRandom {
public static void main(String[] args) {
// 0 이상 11 미만의 난수 15개 출력하기
for (int count = 1; count <= 15; count++) {
int randomNumber = (int) (Math.random() * 11);
System.out.printf("%d ", randomNumber);
}
System.out.printf("%n==============================%n");
// 3 이상 14 미만의 난수 15개 출력하기
for (int count2 = 1; count2 <= 15; count2++) {
int randomNumber2 = (int) (Math.random() * 11) + 3;
System.out.printf("%d ", randomNumber2);
}
}
}
<실행 결과>
3. 실습 내용
3-1. 1부터 100까지 소수(Prime number)를 출력하는 프로그램
- 소수(Prime number) : 1보다 큰 자연수 중에서 1과 자기 자신만을 약수로 가지는 수
public class Ex01 {
public static void main(String[] args) {
int count = 0;
for (int number1 = 2; number1 <= 100; number1++){
for(int number2 = 2; number2 <= number1; number2++){
if(number1 % number2 == 0){
count ++;
}
}
// 핵심 : 1을 제외하고 자기 자신으로 한 번만 나눠질때 소수
if (count == 1){
System.out.print(number1 +" ");
}
count = 0;
}
}
}
<실행 결과>
3-2. 1부터 100까지 완전수(Perfect number)를 탐색하는 프로그램
- 완전수(Perfect number) : 자기 자신을 제외한 양의 약수를 모두 더했을 때 자기 자신이 되는 자연수
public class Ex02 {
public static void main(String[] args) {
// 1부터 100까지 완전수 출력 - 1부터 100까지 모든 수를 탐색한다.
for (int number1 = 1; number1 <= 100; number1++) {
int count = 0;
for(int number2 = 1; number2 < number1; number2++) {
if (number1 % number2 == 0) count += number2;
}
if (number1 == count) System.out.println(number1);
}
}
}
<실행 결과>
3-3. 1부터 100까지 임의의 정수 난수를 생성하고, 사용자가 Up-down 게임 형식으로 해당 수를 탐색하는 프로그램
import java.util.Scanner;
public class Ex03 {
public static void main(String[] args) {
// 난수 발생 logic
int number, input;
Scanner scanner = new Scanner(System.in);
// 1부터 100까지의 난수를 발생시키는 메서드
number = (int) (Math.random() * 100) + 1;
while(true) {
System.out.printf("값을 입력하세요 : ");
input = scanner.nextInt();
// 난수값과 입력한 값이 일치할 때 loop 탈출
if(number == input) {
System.out.println("정답입니다.");
break;
}
// 입력한 값이 난수보다 낮은 경우
else if(number > input) System.out.printf("up입니다.%n%n");
// 입력한 값이 난수보다 높은 경우
else if(number < input) System.out.printf("down입니다.%n%n");
}
}
}
<실행 결과>
3-4. switch 문 활용
import java.util.Scanner;
public class Ex04 {
public static void main(String[] args) {
System.out.printf("지금은 몇 월입니까? : ");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch(month) {
case 3: case 4: case 5:
System.out.println("현재는 봄입니다.");
break;
case 6: case 7: case 8:
System.out.println("현재는 여름입니다.");
break;
case 9: case 10: case 11:
System.out.println("현재는 가을입니다.");
break;
case 12: case 1: case 2:
System.out.println("현재는 겨울입니다.");
break;
default:
System.out.println("월 수가 입력되지 않았습니다.");
break;
}
}
}
<실행 결과>
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'전공 수업 > 객체 지향 프로그래밍(Java)' 카테고리의 다른 글
[7주 차] - Math.random() 메서드, 제어문(반복문, 조건문)을 사용한 코드 예제 (0) | 2022.10.12 |
---|---|
[6주 차] - 배열(Array)의 선언과 생성, 초기화, 다차원 배열 (2) | 2022.10.07 |
[4주 차] - 연산자(Operator)와 반복문(for, while, do-while) (2) | 2022.09.26 |
[3주 차] - 변수(Variable)와 상수(Constant), 문자와 문자열(String) (0) | 2022.09.21 |
[2주 차] - Eclipse 개발 환경 설정, 간단한 프로그램 작성하기 (0) | 2022.09.15 |
댓글