제어문의 종류는 다음과 같다.
조건문 반복문 if 문, switch 문 for 문, while 문, do-while 문
if (조건문) {
실행문;
...
} // 중괄호 블록 내에 실행문이 하나밖에 없다면 생략가능하나 가독성의 문제로 사용한다.
int score = 93;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A입니다.");
}
if (score < 90)
System.out.println("점수가 90보다 작습니다.");
System.out.println("등급은 B입니다."); //if문과 관계없이 실행된다.
}
int score = 85;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.");
System.out.println("´등급은 A입니다.");
} else {
System.out.println("점수가 90보다 작습니다.");
System.out.println("등급은 B입니다.");
}
int score = 75;
if(score>=90) {
System.out.println("점수가 100~90입니다.");
System.out.println("등급은 A입니다.");
} else if (score>=80) {
System.out.println("점수가 80~90입니다.");
System.out.println("등급은 B입니다.");
} else if (score>=70) {
System.out.println("점수가 70~80입니다.");
System.out.println("등급은 C입니다.");
} else if (score>=60) {
System.out.println("점수가 60~70입니다.");
System.out.println("등급은 D입니다.");
}
여러 단계로 중첩되는 경우가 많기에 실행 흐름을 이해하지 못한다면 프로그램 작성, 분석이 어려워진다.
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);
switch 문은 괄호 안의 변수값에 따라 해당 case로 가서 실행문을 실행시키며 변수값과 동일한 값을 갖는 case가 없다면 default로 가서 실행문을 실행시킨다. (default 불필요시 생략이 가능하다.)
switch
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 나왔습니다."); }
break가 있다면 다음 case 실행하지 않고 switch 문을 빠져나오고, break가 없다면 다음 case가 연달아 실행되는데, 이 때는 case 값과는 상관없이 실행된다.
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("손님입니다."); }
Java12 이후부터는 switch문에서 표현식을 사용할 수 있다. break 대신 화살표와 중괄호를 사용해 가독성이 좋아졌다.
char grade = 'B'; switch (grade) { case 'A', 'a' -> { System.out.println("우수 회원입니다."); } case 'B', 'b' -> { System.out.println("일반 회원입니다."); } default -> { System.out.println("손님입니다."); } // 중괄호 안에 실행문이 하나만 있을 경우에는 중괄호 생략이 가능하다. }
Switch Expressions을 사용하면 스위치된 값을 변수에 바로 대입이 가능하며 단일 값일 경우에는 화살표 오른쪽에 기술, 중괄호를 사용할 경우에는 yield 키워드로 값을 지정하면된다. (이 경우 default가 반드시 존재해야 한다.)
타입 변수 = switch(grade) { case "값1" -> 변수값; case "값2" -> { ...; yield 변수값; } default -> 변수값 };
int sum = 0;
for (int i=1; i<=100; i++) {
sum = sum + i; //100번 반복
}
System.out.println("1~100까지의 합 :" + sum);
100개의 실행문을 3개의 행으로 압축했다. 아래 그림은 for 문의 실행 흐름을 도식화 한 것이다.
int i; // for 문 이전에 변수를 선언
for (i=1; i<=100; i++) { ... }
System.out.println("최종 i값: " + i); //for 문을 벗어나서 i를 사용
for(float x=0.1f; x<=1.0f; x+=0.1f) {
System.out.println(x);
}
for (int m=2; m<=9; m++) {
System.out.println("***" + m + " 단 ***"
for (int n=1; n<=9; n++) {
System.out.println(m + " X " + n + " = " + (m*n));
}
}
아래는 while 문 도식화 한 사진.
Scanner scanner = new Scanner(System.in);
boolean run = true;
int speed = 0;
while (run) {
System.out.println("----------------------------");
System.out.println("1. 증속 | 2. 감속 | 3. 종료 ");
System.out.println("----------------------------");
System.out.println("선택해주세요.");
String strNum = scanner.nextLine();
if (strNum.equals("1")) {
System.out.println("증속을 선택했습니다, 현재 속도 " + speed);
speed++;
} else if (strNum.equals("2")) {
System.out.println("감속을 선택했습니다, 현재 속도 " + speed);
speed--;
} else if (strNum.equals("3")) {
System.out.println("프로그램 종료, 현재 속도 " + speed);
run = false;
}
}
System.out.println("");
System.out.println("메세지를 입력하세요");
System.out.println("프로그램을 종료하려면 'q'를 입력하세요.");
Scanner scanner = new Scanner(System.in);
String inputString;
do {
System.out.print(">");
inputString = scanner.nextLine();
System.out.println(inputString);
} while (! inputString.equals("q")); // 입력된 내용이 q가 아니라면 계속 반복
System.out.println();
System.out.println("프로그램 종료");
Outter: for (char upper = 'A'; upper <= 'Z'; upper++) {
for (char lower = 'a'; lower <= 'z'; lower++) {
System.out.println(upper + " - " + lower);
if (lower == 'g') {
break Outter; // break 이름;
}
}
}
System.out.println("프로그램 실행종료");
for(int i=1; i<=10; i++){
if(i%2!=0){
continue; // 홀수면 다음 반복으로 넘어간다.
}
System.out.print(i + " ");
}
String grade ="B";
int score1 = switch (grade) {
case "A" -> 100;
case "B" -> {
int result1 = 100 - 20;
yield result1;
}
default -> 60;
};
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 100; i++) {
if (i%3==0) {
sum += i;
}
}
System.out.println("1부터 100까지의 정수 중에서 3의 배수의 총합은 : " + sum);
}
}
public static void main(String[] args) {
while (true) {
int i = (int) (Math.random() * 6) +1;
int j = (int) (Math.random() * 6) +1;
System.out.println(i + " , " + j);
if ((i+j)==5) {
break;
}
}
}
public static void main(String[] args) {
int x, y;
for (x = 1; x <= 10; x++) {
for (y = 1; y <= 10; y++) {
if((4*x + 5*y) == 60) {
System.out.println(x + " , " + y);
}
}
}
}
public static void main(String[] args) {
int i, j;
for (i=1; i<=5; i++) {
for (j=1; j<=i; j++) {
System.out.print("*");
if (j==i) {
System.out.println();
}
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int Num = 0;
boolean bank = true;
while(bank) {
System.out.println("---------------------------------");
System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
System.out.println("---------------------------------");
System.out.println("선택 > " );
int InputNum = scanner.nextInt();
switch (InputNum) {
case 1:
System.out.println("예금액 > ");
Num = Num + scanner.nextInt();
break;
case 2:
System.out.println("출금액 > ");
Num = Num - scanner.nextInt();
break;
case 3:
System.out.println("잔고 > " + Num);
break;
case 4:
bank = false;
break;
}
System.out.println();
}
System.out.println("프로그램 종료");
}
연습문제 푸는데 뭔 한시간이나 걸리지?