■ 제어문의 종류
1. 분기문(비교문) : 주어진 조건의 결과에 따라 실행 문장을 다르게 하여 전혀 다른 결과를 얻기 위해 사용되는 제어문이다.
ex) if문, switch문
2. 반복문 : 특정한 문장을 정해진 규칙에 따라 반복처리하기 위한 제어문이다.
ex) for문, while문, do~while문
3. break문 : 반복문 내에서 쓰이며 반복문을 빠져나갈 때 쓰이는 제어문이다.
4. continue문 : 현재 진행되는 반복 회차를 포기하고 다음 회차로 이동한다.
-------------------------------------------------------------------------------------------------------------------------------
■ if문
1. 단순 if문
수행할 문장이 단행일 경우 {} 생략가능.
2. 단일 if ~ else문
조건을 만족할 때와 만족하지 않을 때, 각각 서로 다른 수행문장이 실행
수행할 문장이 단행일 경우 {} 생략가능.
3. 다중 if문
조건 비교가 한 가지로 충분하지 않을 경우에 사용
package jun.java.exam05;
public class IfEx1 {
public static void main(String[] ar) {
int a = 80; // a의 값을 입력받는 형태로 변환해보기
String grade = "";
if(a >= 90) {
grade = "A학점";
}else if(a >= 80) {
grade = "B학점";
}else if(a >= 70) {
grade = "C학점";
}else if(a >= 60) {
grade = "D학점";
}else {
grade = "F학점";
}
System.out.println("당신의 학점은? " + grade);
}
}
<결과>
당신의 학점은? B학점
[실습] 아래와 같이 실행되는 프로그램을 작성해 보자.
package jun.java.exam06;
import java.io.IOException;
public class IfEx2 {
public static void main(String[] ar)throws IOException {
char a = 0; char b = 0; char c = 0;
int d = 0;
System.out.print("암호문 = ");
a = (char)System.in.read();
b = (char)System.in.read();
c = (char)System.in.read();
System.in.read();System.in.read(); // Enter값 처리
System.out.print("키워드 (1~3)");
d = System.in.read() - '0'; // 숫자 입력
System.in.read();System.in.read();
if(d==1) {
a += 1; b += 1; c += 1;
}
else if(d==2) {
a += 2; b += 2; c += 2;
}
else if(d==3) {
a += 3; b += 3; c += 3;
}
else {
System.out.println("키워드 오류");
System.exit(0); // 프로그램 종료
}
System.out.println("변경문 암호문" + a + b + c + "입니다.");
System.out.println(); // 송신자
System.out.print("복호화 키워드 = "); // 수신자
d = System.in.read() - 48;
if(d != 1 && d != 2 && d != 3) {
System.out.println("복호화 범위 초과");
System.exit(0);
}
a -= d; b -= d; c-= d;
System.out.println("전송된 암호문은 " + a + b + c + "입니다");
}
}
-------------------------------------------------------------------------------------------------------------------------------
■ switch문
1. 다양한 처리문을 두고 조건값에 의해 하나의 처리문이나 여러 개의 처리문을 한 번에 수행하는 데 유용한 분기(비교)문
2. if문은 조건값이 boolean형, switch문은 정수형(byte, short, int)과 문자형(char)
3. long, 문자열, boolean, float, double형 사용불가
4. break문은 하나의 조건값 마다 하나의 수행문만 필요한 경우 사용
5. break문이 없을 경우 다음 break문을 만날 때까지 모든 수행문 실행
6. 인자값과 비교값 1,2,3,이 모두 일치하지 않는다면 default문 실행
7. 주의사항 : case 뒤에 오는 조건값이 중복되지 않도록 해야 한다. 그렇지 않으면 case를 구분하는 값이 복제되어 중복되었다는 오류가 발생한다.
8. switch문의 인자값으로는 변수, 연산식, 메소드가 들어간다.
if문과 swich문의 차이점
switch문은 값을 비교하고, if - else문은 범위를 비교한다.
[실습] 아래와 같이 실행되는 프로그램을 작성해보자.
package jun.java.exam07;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SwitchEx {
public static void main(String[] ar) throws IOException {
int kor; int eng; int mat;
float avg;
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
System.out.print("국어 =");
kor = Integer.parseInt(br.readLine());
System.out.print("영어 =");
eng = Integer.parseInt(br.readLine());
System.out.print("수학 =");
mat = Integer.parseInt(br.readLine());
avg = (kor + mat + eng) / 3.f;
switch((int)(avg/10)) {
case 10:
case 9:
System.out.println("당신의 학점은 A입니다"); break;
case 8:
System.out.println("당신의 학점은 B입니다"); break;
case 7:
System.out.println("당신의 학점은 C입니다"); break;
case 6:
System.out.println("당신의 학점은 D입니다"); break;
default:
System.out.println("당신의 학점은 F입니다"); break;
}
}
}
[실습2]
문제 이름 = 홍길동
국어 = 99
영어 = 88
수학 = 79
결과
이름 국어 영어 수학 총점 평균 학점
홍길동 99 88 79 266 88.67 B
-------------------------------------------------------------------------------------------------------------------------------
[참고]
반올림의 원리
소수점 첫째자리에서 반올림해서 정수
+0.5 (int)
0.1 0.6 0
0.6 1.1 1
소수점 둘째 자리에서 반올림해서 소수점 첫째자리까지
목표값 +0.05 *10 (int) /10
1.11 1.1 1.16 11.6 11 1.1
1.16 1.2 1.21 12.1 12 1.2
소수점 둘째 자리에서 반올림해서 소수점 첫째자리까지
+0.005 *100 (int) /100
1.121 1.126 112.6 112 1.12
1.126 1.131 113.1 113 1.13
-------------------------------------------------------------------------------------------------------------------------------
package jun.java.exam08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class QuizEx {
public static void main(String[] ar)throws IOException{
int kor; int eng; int mat; int sum;
float avg; char grade; String name;
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
System.out.print("국어 = ");
kor = Integer.parseInt(br.readLine());
System.out.print("영어 = ");
eng = Integer.parseInt(br.readLine());
System.out.print("수학 = ");
mat = Integer.parseInt(br.readLine());
System.out.print("이름 = ");
name = br.readLine();
sum = kor + eng + mat;
avg = sum / 3.f;
avg = (int)((avg + 0.005)*100)/100.f;
System.out.println("avg의 값 : "+avg);
switch((int)avg/10) {
case 10:
case 9:
grade ='A'; break;
case 8:
grade ='B'; break;
case 7:
grade ='C'; break;
case 6:
grade ='D'; break;
default:
grade = 'F';break;
}
System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.println(name+"\t"+kor+"\t"+eng+"\t"+mat+"\t"+sum+"\t"+avg+"\t"+grade);
}
}
-------------------------------------------------------------------------------------------------------------------------------
■ for문
특정한 명령들을 정해진 규칙에 따라 반복처리 할 때 사용하는 제어문이다.
초기식(①) : 가장 먼저 한 번만 수행됨
조건식(②) : 초기식 다음으로 수행되고 루프(loop)가 돌 때마다 한 번씩 비교하며 반복문을 수행할지 반복문을 벗어날지 결정함
증감식(④) : 루프를 수행할 때마다 조건식에 비교하기 전에 항상 수행하며, 변수값을 증가 또는 감소시켜 루프를 원활하게 수행시킴
package jun.java.exam12;
import java.io.IOException;
public class ForEx1 {
public static void main(String[] ar) throws IOException {
int dan = 0;
System.out.println("구구단");
System.out.print("단수 = ");
dan = System.in.read() - 48;
for(int i=1;i<=9;i++) {
System.out.println(dan + "*" + i + "=" + (dan*i <10 ? " ": "") +dan*i);
} // for문 블럭
}
}
-------------------------------------------------------------------------------------------------------------------------------
■ 다중 for문
for문 안에 for문이 있는 경우
package jun.java.exam13;
public class ForEx2 {
public static void main(String[] ar) {
System.out.println("********** 구구단 **********");
for(int i=1; i<10; i++) {
for(int j=2; j<10; j++) {
System.out.print(j + "*" + i + "=" + i*j + "\t");
}
System.out.println();
}
}
}
<결과>
-------------------------------------------------------------------------------------------------------------------------------
■ while문
for문과 유사함. 특정 명령들을 반복적으로 처리
for문은 반복횟수를 정확히 알고 있는 경우에 많이 사용하고 while문은 반복횟수를 정확히 알지 못할 때 사용함
또한 for문은 '수치제어'에, while문은 '동작제어'에 사용된다. (ex. 화면보호기)
무한루프에 빠질 수 있으므로 주의한다.
package jun.java.exam01;
public class WhileEx {
public static void main(String[] ar) {
int i = 0; int sum = 0;
while(i<100) {
i++; sum += i;
}
System.out.println("1부터 100까지의 합은 "+sum);
}
}
<결과>
1부터 100까지의 합은 5050
package jun.java.exam02;
public class WhileEx2 {
public static void main(String[] args) {
int i = 1;
while(i<=31) {
if(i%7 == 0) {
System.out.println(i);
}else {
System.out.print(i + "\t");
}
i++;
}
System.out.println();
}
}
<결과>
-------------------------------------------------------------------------------------------------------------------------------
■ do ~ while문
while문과는 달리 do{}를 무조건 한 번 수행한 후 값을 비교
while(조건식) 뒤에 ;(세미콜론)을 생략하면 오류 발생
'최소한 한 번은 수행된다'의 의미
-> 사용자의 입력제한을 위해서, 즉 한 번 수행되는 게 정상인 상황.
package jun.java.exam03;
import java.io.IOException;
public class DoWhileEx { // 사용자 메뉴입력 제한하기
public static void main(String[] ar) throws IOException {
int menu = 0;
do {
System.out.println("1. 회원가입");
System.out.println("2. 회원조회");
System.out.println("3. 회원탈퇴");
System.out.println("0. 프로그램 종료");
System.out.print("메뉴 선택 : ");
menu = System.in.read() - 48;
System.in.read();
System.in.read();
}while(menu != 1 && menu != 2 && menu != 3 && menu != 0);
System.out.println("선택한 메뉴는 : " + menu);
}
}
-------------------------------------------------------------------------------------------------------------------------------
■ break문
반복문(for, while), switch문에서 쓰임
강제적으로 해당 반복문을 빠져나갈 때 쓰이는 제어문
break문을 만날 때 가장 가까운 반복문 한 개를 탈출함
package jun.java.exam04;
public class BreakEx {
public static void main(String[] ar) {
int i = 0;
while(i<100) {
System.out.print(" " + i);
if(i == 20)
break;
i++;
}
System.out.println("");
}
}
<결과>
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-------------------------------------------------------------------------------------------------------------------------------
■ break label문
break label문은 break문과 달리 여러개의 반복문을 빠져나갈 때 사용함
라벨의 지점을 찾아 커서 이동
package jun.java.exam05;
public class BreakLabelEx {
public static void main(String[] ar) {
One : for(int i = 0; i<5; i++) {
Two : for(int j = 0; j<3; j++) {
if(j == 2)
break One;
System.out.print(j + "x" + i + " ");
}
System.out.println();
}
}
}
<결과>
0x0 1x0
-------------------------------------------------------------------------------------------------------------------------------
■ continue문
반복문에서 사용되며 어느 특정 문장이나 여러 문장을 건너뛰고자 할 때 사용됨
break문은 탈출하는 }의 오른쪽에 커서가 위치한다.
반면에 continue는 } 왼쪽에 커서가 위치하고 continue가 있는 그 순간을 건너 뛴다.
package jun.java.exam06;
public class ContinueEx {
public static void main(String[] ar) {
for(int i = 0; i <=20; i++) {
if(i % 2 == 0)
continue;
System.out.print(i + " "); //홀수만 출력한다.
}
System.out.println("");
}
}
<결과>
1 3 5 7 9 11 13 15 17 19
-------------------------------------------------------------------------------------------------------------------------------
■ continue label문
continue label문은 레이블까지 수행시점이 이동함
package jun.java.exam07;
public class ContinueLabelEx {
public static void main(String[] ar) {
F1 : for(int i = 0; i<5; i++) {
F2 : for(int j = 0; j<3; j++) {
if(j ==1) {
continue F1;
}
System.out.print(j+" x "+i+" ");
}
System.out.println("");
}
}
}
<결과>
0 x 0 0 x 1 0 x 2 0 x 3 0 x 4
-------------------------------------------------------------------------------------------------------------------------------
■ 향상된 for문
자바 5.0에 추가된 for문
for문의 반복 카운트 변수가 배열의 인덱스일 경우 사용
카운트 변수를 제어해야 할 경우에는 사용할 수 없음
package jun.java.exam08;
public class ForEx3 {
public static void main(String[] args) {
String[] arr = {"AA", "BB", "CC", "DD", "EE"};
// 향상된 for문 (속도)
// 처음부터 끝까지 가야 할 때. 지운 코드 만큼 더 빠르다. (횟수 세는 만큼 연산을 하지 않음)
for(String s : arr) {
System.out.println("배열의 값들은 ? " + s);
}
// 그냥 for문, 카운트를 하면서 가니 속도가 느림
for(int i = 0; i<arr.length; i++) {
System.out.println("배열의 값들은 ? " + arr[i]);
}
}
}
<결과>
배열의 값들은 ? AA
배열의 값들은 ? BB
배열의 값들은 ? CC
배열의 값들은 ? DD
배열의 값들은 ? EE
배열의 값들은 ? AA
배열의 값들은 ? BB
배열의 값들은 ? CC
배열의 값들은 ? DD
배열의 값들은 ? EE
'IT&코딩 > Java' 카테고리의 다른 글
Java - 7일차 (Game 설계) (0) | 2022.10.23 |
---|---|
Java - 6일차 (배열) (0) | 2022.10.20 |
Java - 4일차 (표준입출력) (0) | 2022.10.20 |
Java - 3일차 (연산자) (2) | 2022.10.20 |
Java - 2일차 (자료형) (0) | 2022.10.12 |