반복문에는 for, while, do-while 문이 있다.
for 문은 반복횟수를 알고 있을 때,
while 문은 반복 조건위주에 따라 반복할 때 사용된다.
1. for 문
형태
3 실행문; } |
1 초기화식 : 반복 횟수를 제어하는 변수 초기화식이 제일 먼저 실행된다.
2 조건식 : 조건식을 검사해서 true 이면 3 : 실행문을 실행, false 이면 for 문을 종료한다.
4 증감식 : 3 실행문이 모두 실행되면, 4 증감식을 실행한 후 다시 2 조건식을 검사한다.
true 이면 3 실행문을 또 다시 실행하고, 다시 4 증감식을 실행을 반복한다.
ex) 1 ~ 10 까지 출력하는 프로그램
public class ForPrint1to10 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
만약 초기화식이 필요 없는 경우, 생략이 가능하다.
for ( ; i <=100; i++)
초기화식은 둘 이상 가능하고, 증감식도 둘 이상 가능하다. (쉼표로 구분한다.)
for (int i = 0, j = 100; i <= 50 && j <= 50; i++, j--) { . . . }
초기화식에 사용되는 변수( i )는 for 문 블록에서만 유효한 지역 변수이다. (for 문이 끝나면 사라짐)
ex) 1 ~ 100 까지 합을 출력하는 프로그램
public class ForSum1To100Exam {
public static void main(String[] args) {
int sum = 0; //합계 변수
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1 ~ 100 까지의 합 : "+sum);
}
}
초기화식에 사용되는 루프 카운트 변수로 부동소수점을 사용하면 안된다!
public class ForFloatCounterExam {
public static void main(String[] args) {
for (float x = 0.1f; x <= 1.0f; x += 0.1f) {
System.out.println(x);
}
}
}
0.1은 float 타입으로 정확히 표현할 수 없기 때문에, x에 더해지는 값은 실제 0.1 보다 약간 크다. (근사치)
따라서 루프가 9번만 실행된다. (x = 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.700005, 0.8000001. 0.9000001)
- 중첩 for 문 (구구단)
바깥쪽 for 문이 한 번 수행될 때 안쪽 for 문이 지정된 횟수만큼 수행된 후 다시 바깥쪽 for 문으로 돌아간다.
ex) 구구단 출력 프로그램
public class ForGuguTableExam {
public static void main(String[] args) {
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));
}
}
}
}
2. while 문
조건식이 true 일 경우에 계속해서 반복한다. 조건식에는 주로 논리 연산식이 온다.
false 일 경우 반복 멈추고 while 블록을 종료한다.
형태
2 실행문 <반복 영역> } |
1 : 조건식이 true 이면, 2 : 실행문을 실행한 후, 다시 1 : 조건문을 검사한다.
1 : 조건식이 false 이면, while 문을 종료한다.
ex) 1 ~ 100 까지의 합 출력
public class WhileSumExam {
public static void main(String[] args) {
int sum = 0; // 합계 저장 변수
int i = 1; // 카운터 변수
while(i <= 100) {
sum += i;
i++;
}
System.out.println("1 ~ + (i-1) + " 합 : "+ sum);
}
}
조건식의 결과가 항상 true 라면, 무한 루프를 돌게 된다. (while(true))
무한 루프시, while 문을 빠져나가기 위한 코드가 필요하다.
(true → false, break 문 이용)
* 키보드로 while문 제어하기
- 키보드에서 1, 2를 입력하면 속도를 증속, 감속시키고 3을 입력하면 프로그램 종료시키는 프로그램
키보드로부터 입력된 키 코드를 반환하는 메소드
int keyCode = System.in.read();
* 키보드 각 키가 가지고 있는 키코드
숫자 | 알파벳 | 기능키 | 방향키 | |||
0 = 48 1 = 49 2 = 50 3 = 51 4 = 52 5 = 53 6 = 54 7 = 55 8 = 56 9 = 57 |
A = 65 B = 66 C = 67 D = 68 E = 69 F = 70 G = 71 H = 72 I = 73 J = 74 K = 75 L = 76 M = 77 |
N = 78 O = 79 P = 80 Q = 81 R = 82 S = 83 T = 84 U = 85 V = 86 W = 87 X = 88 Y = 89 Z = 90 |
a = 97 b = 98 c = 99 d = 100 e = 101 f = 102 g = 103 h = 104 i = 105 j = 106 k = 107 l = 108 m = 109 |
n = 110 o = 111 p = 112 q = 113 r = 114 s = 115 t = 116 u = 117 v = 118 w = 119 x = 120 y = 121 z = 122 |
Backspace = 8 Tab = 9 Enter = [CR=13, LF=10] shift = 16 Ctrl = 17 Alt = 18 ESC = 27 Space = 32 PAGE UP = 33 PAGE DOWN = 34 |
← = 37 ↑ = 38 → = 39 ↓ = 40
|
public class WhileKeyControlExam {
public static void main(String[] args) {
boolean run = true;
int speed = 0;
int keyCode = 0;
while(run) {
if (keyCode != 13 && keyCode != 10) {
// 엔터키가 입력되면, 캐리지리턴과 라인피가 입력되므로 값을 제외시킨다.
System.out.println(" ====================== "); // 메뉴 생성
System.out.println("1. 증속, 2. 감속, 3. 중지");
System.out.println(" ====================== ");
System.out.print("선택 : ");
}
keyCode = System.in.read(); // 키보드의 키 코드를 읽음 while문 일시 정지
if (keyCode == 49) { // 1을 읽은 경우
speed++;
System.out.println("현재 속도 = "+speed);
} else if (keyCode == 50 { // 2를 읽은 경우
speed--;
System.out.println("현재 속도 = "+speed);
} else if (keyCode == 51 { // 3을 읽은 경우
run = false;
}
}
System.out.println("프로그램 종료");
}
}
현재 keyCode = System.in.read( ); 에서 입력을 기다리는 상태이다.
콘솔 창에 "1" 을 입력하고 엔터키를 누르면
while문이 3번 반복되고, keyCode = System.in.read( ); 에서 3번의 키 코드를 읽게 된다.
(1, 캐리지리턴, 라인피드)
첫 번째는 "1"의 키코드인 49, 두 번째는 엔터키의 캐리지리턴 13,
세 번째는 엔터키의 라인피드 10을 읽는다.
이후 다른 키를 받기 위해 다시 입력을 기다린다. (2를 입력해도 마찬가지)
"3"을 입력하면 run 변수가 false 되어 while 문이 종료되고 프로그램이 종료된다.
* System.out.println( ); // 출력 이후 다음 행으로 이동
System.out.print( ); // 출력 이후 다음 행 이동하지 않음
3. do - while 문
블록 내부를 한번 실행 후, 조건식을 검사하여 반복 여부를 결정한다.
형태
1 실행문; } while (2 조건식); |
while( ) 뒤에는 반드시 세미콜론 ";"이 붙어야 한다.
1 실행문이 우선 수행된 후,
2 조건식을 검사, true 이면 1 실행문을 반복 수행하고, false 이면 do - while 문을 종료한다.
* 콘솔에서 입력한 문자열을 읽는 방법 (C 에서의 scanf ( ); 처럼!)
System.in.read( ); 메소드는 하나의 키 코드만 읽기 가능 (문자열 불가)
아래와 같이 Scanner 객체를 생성하고, nextLine( ) 메소드를 호출하면
콘솔에 입력된 문자열을 한 번에 읽을 수 있다.
nextLine( ); 메소드로 읽은 문자열을 저장하기 위해서는 String 변수가 필요하다 (inputString 변수)
String inputString = scanner.nextLine( ); // nextLine( ); 메소드 호출 |
Scanner(클래스)를 사용하려면 import 문이 필요하다.
import java.util.Scanner;
ex) 키보드로부터 문자열을 입력받아 출력하는 프로그램
import java.util.Scanner;
public class DoWhileExam {
public static void main(String[] args) {
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"); ); //문자열 비교 시 equals() 메소드 이용
System.out.println();
System.out.println("프로그램 종료");
}
}
Scanner를 생성, nextLine( ) 메소드로 문자열을 읽는다.
! inputString.equals("q"); // 리턴한 결과를 반대로 바꾼다.
equals( ) 메소드는 inputString의 문자열과 "q"와 같으면 true, 그렇지 않으면 false 반환한다.
하지만, 논리 부정연산자에 의해 "q" 가 저장되어 있으면 false가 반환되어 do - while 문을 종료한다.
4. break 문
반복문 (for, while, do - while)의 실행을 중지할 때 사용된다. 또한 swich 문에서도 종료 용도로 쓰인다.
if 문과 함께 조건식에 따라 while, for 문을 종료한다.
ex) 주사위 6이 나오면 while 문 종료
public class BreakExam {
public static void main(String[] args) {
while(true) { // 무한루프
int num = (int)(Math.random() * 6) + 1;
System.out.println(num);
if (num == 6) {
break; // 6이 나오면 종료
}
}
System.out.println("프로그램 종료");
}
}
반복문이 중첩되있는 경우 break 문은 가장 가까운 반복문만 종료시킨다.
만약 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면, 바깥쪽 반복문에 이름(라벨)을 붙인다.
이름:for ( ... ) { ... } // 이름 붙이기
break 이름; // 해당 이름의 반복문 종료
public class BreakOutExam {
public static void main(String[] args) {
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;
}
}
}
System.out.println("프로그램 실행 종료");
}
}
5. continue 문
반복문 (for, while, do - while) 에서만 사용된다.
continue 문을 만나면 바로 조건식으로 이동한다.
형태
. . . continue; // 조건식으로 이동! X // 더이상 진행 안됨 } |
while ( . . . ) { . . . continue; // 조건식으로 이동! X // 더이상 진행 안됨 } |
break 문은 반복문을 아예 종료하지만,
continue 문은 종료하지 않고 다시 조건식으로 이동한다. (반복문은 계속 수행된다.)
특정 조건을 만족하는 경우, continue 문을 사용해서 이후 문장을 실행하지 않고 다음 반복으로 넘어간다.
ex) 1 ~ 10 사이 짝수만 출력
public class ContinueExam {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) { // 홀수인 경우!
continue; // 다음 반복으로 넘어감
}
System.out.println(i);
}
}
}
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 2. 제어문' 카테고리의 다른 글
1. Java 자바 - 조건문 (if - else, switch) (0) | 2020.04.25 |
---|