4. 조건문
4.1 코드 실행 흐름제어
자바 프로그램은 main() 메소드의 시작 {}위에서 아래로 설명하는 흐름을 가지고 있다.
이러한 실행흐름의 방향을 바꿀수 있도록 하는 것이 흐름 제어문 이다.
제어문 블록이 실행 완료된 후 다시 제어문 처음으로 돌아갈지 제어문 블록을 빠져 나와 정상흐름으로 올지는 어떤 제어문을 사용하느냐에 다르다.
조건문일때는 정상흐름으로 돌아오지만 반복문의 경우 제어문 처음으로 다시 돌아가 반복실행한다. 이것을루핑이라고 한다.
4.2 if문
조건식에는 true또는 false값을 산출할수 있는 연산식이나 boolean변수가 올수 있다.
조건식이 true면 블록을 실행 false면 블록 실행안함.
{}안에 실행문이 하나라면 중괄호 생략가능 하지만 버그발생의 원인이 되기도하고 가독성을 위해 그냥 사용하자.
if > else if > else
int score = 85;
if(score >= 90)
{
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A입니다.");
}
else if (score >= 80)
{
System.out.println("점수가 80~89입니다.");
System.out.println("등급은 B입니다.");
}
else if (score >= 70)
{
System.out.println("점수가 70~79입니다.");
System.out.println("등급은 C입니다.");
}
else
{
System.out.println("점수가 70점 미만입니다.");
System.out.println("등급은 D입니다.");
}
Math.random() 메소드 0.0에서 1.0사이 double타입 난수 리턴
0.0 <= Math.random() <= 1.0
(0.0 *6) <= ( Math.random() * 6 )<= (1.0 * 6) 0 1 2 3 4 5
양변에 1더하면 1 2 3 4 5 6
int num = (int)(Math.random()*6)+1;
if (num==1)
{
System.out.println("1번이 나왔습니다.");
}
else if (num==2)
{
System.out.println("2번이 나왔습니다.");
}
else if (num==3)
{
System.out.println("3번이 나왔습니다.");
}
else if (num==4)
{
System.out.println("4번이 나왔습니다.");
}
else if (num==5)
{
System.out.println("5번이 나왔습니다.");
}
else
{
System.out.println("6번이 나왔습니다.");
}
중첩 if문
중첩의 단계에는 제한이 없다. 매우 복잡한 실행흐름이 생긴다.
실제 프로그램에서는 여러 단계로 중첩되는 경우가 많아 코드의 실행흐름을 이해하지 못한다면
프로그램 작성은 물론이고 이미 작성된 프로그램도 분석이 어려워진다.
int score = (int) (Math.random()*20) + 81 ;
System.out.println("점수: " + score);
String grade;
if (score>=90)
{
if(score>=95)
{
grade = "A+";
}
else
{
grade = "A";
}
}
else
{
if (score>=85)
{
grade = "B+";
}
else
{
grade = "B";
}
}
System.out.println("학점: " + grade);
4.3 switch 문
if문은 true false두 가지 밖에 없어서 경우의 수가 많아지면 else if를 반복적으로 추가해야하므로 코드가 복잡.해짐
switch 문은 변수의 값에 따라서 실행문이 결정되기 때문에 if문보다 코드가 간결해진다.
break가 없다면 연달아 시행
int num = (int)(Math.random()*6)+1;
switch(num)
{
case 1:
System.out.println("1번이 나왔습니다.");
break;
case 2:
System.out.println("2번이 나왔습니다.");
break;
case 3:
System.out.println("3번이 나왔습니다.");
break;
case 4:
System.out.println("4번이 나왔습니다.");
break;
case 5:
System.out.println("5번이 나왔습니다.");
break;
default:
System.out.println("6번이 나왔습니다.");
}
int time = (int)(Math.random()\*4)+8;
System.out.println("[현재 시간 : " + time + "시]");
switch(time)
{
case 8:
System.out.println("출근합니다.");
case 9:
System.out.println("회의를 합니다.");
case 10:
System.out.println("업무를 봅니다.");
default:
System.out.println("외근을 나갑니다.");
}
switch문의 괄호에는 정수타입과 문자열타입 변수를 사용할 수 있다.
char grade = 'B';
switch(grade)
{
case 'A':
case 'a':
System.out.println("우수 회원입니다.");
break;
case 'B':
case 'b':
System.out.println("일반 회원입니다.");
break;
default:
System.out.println("손님입니다.");
}
자바 12이후부터는 switch문에서 표현식을 사용할 수 있게 되었음.
break문을 없애는 대신 화살표와 중괄호를 사용해 가독성이 좋아졌음.
중괄호 안 실행문이 한줄이면 중괄호 생략가능
char grade = 'B';
switch(grade)
{
case 'A', 'a' -> {
System.out.println("우수 회원입니다.");
}
case 'B','b' -> {
System.out.println("일반 회원입니다.");
}
default -> {
System.out.println("손님입니다.");
}
}
java 11 이전과 java 12이후의 비교
String grade = "B";
//JAVA 11이전문법
int score1 = 0;
switch(grade)
{
case "A":
score1 = 100;
break;
case "B":
int result = 100 - 20;
score1 = result;
break;
default:
score1=60;
}
System.out.println("score1: " + score1);
//JAVA 12부터 가능
int score2 = switch(grade) //타입 변수 = switch(변수)
{
case "A" -> 100;
case "B" ->
{
int result = 100 - 20;
//JAVA 13부터가능
yield result; //연산 result를 yield해서 처음 변수에 담는다.
}
default -> 60; // default 생략불가
};
System.out.println("score2: " + score2);'기초단계 > JAVA' 카테고리의 다른 글
| 2022.11.16-1 JAVA 참조타입 (0) | 2022.11.16 |
|---|---|
| 2022.11.15-3 JAVA 반복문 (0) | 2022.11.15 |
| 2022.11.15-1 JAVA 연산자 (0) | 2022.11.15 |
| 2022.11.14-3 JAVA 변수와 타입 2 (0) | 2022.11.14 |
| 2022.11.14-2 JAVA 변수와 타입 (0) | 2022.11.14 |