목차
- for문
- while문
횟수에 대한 반복을 구할 땐 for문으로,
어떤 상황이 올 때까지의 반복을 구할 땐 while문으로 컨트롤할 수 있다.
1. for문
- 조건을 만족하는 동안 문장들을 반복해서 출력한다.
- for문 표현식은 다음과 같다. 각각 다른 조건이기에 세미콜론; 써서 구분한다.
for(초기식; 조건식; 증감식) {
조건을 만족하는 동안 수행될 문장;
}
초기식 → 어떤 조건에서 시작하는지
조건식 → 얼마 동안 반복할 것인지
증감식 → 얼마씩 증가시키면서 볼 것인지
- for문은 몇 회 반복할 것인지 컨트롤하기에 좋다.
- 증감식 전위, 후위 상관없이 사용 가능하나 후위연산 주로 사용한다.
- i += 2 2씩 증가, i +=3 3씩 증가도 사용할 수 있다.
1회전 : 초기식 확인 → 조건식 확인 → 조건식이 true면 문장 수행 / false면 수행하지 않음
2회전 : 증감식 연산 → 조건식 확인 → 조건식이 true면 문장 수행 / false면 수행하지 않음
...조건식이 false가 나올 때까지 문장 주행
❗ for(;;) 무한루프 반복문
* for문에 증감식이 없다면 같은 초기값을 계속 출력한다. terminate 눌러 수동 정지가 필요하다.
* 조건식이 없다면 멈추지 않고 1씩 증가해 계속 반복한다. terminate 눌러 수동 정지가 필요하다.
for문
- 반복문 사용을 통해 보다 간결하게 작성할 수 있어 가독성을 높인다.
- 1에서 10까지 숫자를 일일이 더하는 방법 대신 아래처럼 표현할 수 있는 것이다.
package com.reminder.loop;
public class ForStatement {
public void sumOneToTen() {
int sum = 0;
for(int i=1; i <= 10; i++) {
sum += i;
}
System.out.println("1부터 10까지의 합 = " + sum);
}
}
1부터 10까지의 합 = 55
- 반복문은 코드 수정이 필요한 경우에 대비하여 유지보수성을 향상시킨다.
- 1부터 난수까지의 합계를 구하는 코드이다. 난수는 5~10 사이에서 생성되도록 하였다.
public void sumRandom() {
int random = (int)(Math.random() * 6) + 5;
System.out.println("random number = " + random);
int sum = 0;
for(int i=1; i <= random; i++) {
sum += i;
}
System.out.println("1부터 " + random + "까지의 합계는 " + sum + "입니다.");
}
random number = 10
1부터 10까지의 합계는 55입니다.
- 두 가지 랜덤 정수를 입력 받아 최소값부터 최대값까지를 더한다.
public void sumRandomTwo() {
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 정수를 입력하세요 > ");
int first = scanner.nextInt();
System.out.print("두 번째 정수를 입력하세요 > ");
int second = scanner.nextInt();
int sum = 0;
int min = 0;
int max = 0;
if(first > second) {
max = first;
min = second;
} else {
max = second;
min = first;
}
for(int i = min; i <= max; i++) {
sum += i;
}
System.out.println(first + "에서 " + second + "까지의 합은 " + sum + "입니다.");
}
첫 번째 정수를 입력하세요 > 1
두 번째 정수를 입력하세요 > 10
1에서 10까지의 합은 55입니다.
중첩 for문
- 중첩 for문 표현식은 다음과 같다.
- 외부, 내부 for문에 같은 변수명을 사용할 수도 있다. 보통 index를 뜻하는 i부터 j, k 등을 많이 사용하는 편이다.
for(int i = 1; i <= 10; i++) {
수행될 문장1; → 총 10번 실행됨
for(int j = 1; j <=10; j++) {
수행될 문장2; → 총 100번 실행됨
}
}
- 구구단B 예시처럼, 각각의 기능을 메소드 단위로 분리하여 사용 가능하다. 이 경우 특히 코드의 수정 작업에 용이하다.
- 메소드는 기능 단위로 분리한 것이기 때문에 변경사항이 생겼을 때 구조적인 이점이 있다. 즉 유지보수성이 우수하다.
구구단A. 중첩 for문 사용
public void printGugudan() {
for(int dan=2; dan <= 9; dan++) {
System.out.println("======= " + dan + "단 ======");
for(int num=1; num <= 9; num++) {
System.out.println(dan + " * " + num + " = " + (dan * num));
}
System.out.println();
}
}
구구단B. 메소드와 매개변수 활용
- 한 단씩 출력되는 동안 printGugudanTable(dan); 인자에 단을 전달한다.
- 매개변수로 전달 받은 단을 1에서 9까지 곱하여 출력한다.
public void printGugudanTimes() {
for(int dan=2; dan <= 9; dan++) {
System.out.println("======= " + dan + "단 ======");
printGugudanTable(dan);
}
}
public void printGugudanTable(int dan) {
for(int num=1; num <= 9; num++) {
System.out.println(dan + " * " + num + " = " + (dan * num));
}
System.out.println();
}
- 조건식은 i <= num;으로 입력한다. index는 [0]부터 시작하기 때문에 5개의 행을 입력하더라도 4번째 줄까지밖에 확인할 수 없다.
- 매개변수 값을 printStars(i);로 지정한다. 1번째일 때는 "*", 2번째일 때는 "**"...가 채워진다.
public void printStars(int times) {
for(int i=1; i <= times; i++) {
System.out.print("*");
}
}
public void printTriangle() {
Scanner scanner = new Scanner(System.in);
System.out.print("출력할 행의 길이 > ");
int num = scanner.nextInt();
for(int i=1; i <= num; i++) {
printStars(i);
System.out.println();
}
}
출력할 행의 길이 > 5
*
**
***
****
*****
2. while문
- while문 표현식은 다음과 같다. 앞서 다룬 if문과 달리 (소괄호) 안에 조건식만 들어간다.
초기식;
while(조건식) {
수행될 문장;
[증감식 or 분기문];
}
while문
- 초기식은 while문에 진입하기 전에 필요한 변수 i를 선언한다.
- 조건식은 while() 소괄호 안에 작성한다.
- 증감식은 while문 블럭 안에 작성한다.
❗ 증감식 없이는 무한루프 반복문이 된다.
❗ 필요 시 while(true)를 넣어 무한 반복문을 유도할 수 있다.
❗ while(조건식)에서 조건식을 제외할 수는 없다.while() {}
public void printOneTwoTen() {
int i=1;
while(i <= 10) {
System.out.println(i);
i++;
}
}
1
2
3
4
5
6
7
8
9
10
❗ charAt() : 문자열에서 인덱스에 해당하는 문자를 → char형으로 반환한다.
❗ length() : String 클래스에 속한 메소드로, 문자열의 길이를 → int형으로 반환한다.
- index 값은 [0]부터 주어지기 때문에 for문과 while문에서 초기식은 int i=0;으로 설정한다.
- 같은 이유에서 조건식은 index < str.length(); 라고 세운다. 예를 들어 java는 4개의 문자로 구성돼 있어 그 index 값이 0~3까지이다. 여기서
index <= str.length();라고 설정하면 index는 마지막 4에 미치지 못하므로 런타임 에러 코드 java.lang.StringIndexOutOfBoundsException: String index out of range: 4가 나온다.
public void printStringIndex() {
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요 > ");
String str = scanner.nextLine();
System.out.println("========= for문 ============");
for(int i=0; i < str.length(); i++) {
char ch = str.charAt(i);
System.out.println(i + " : " + ch);
}
System.out.println("========= while문 ==========");
int i=0;
while(i < str.length()) {
char ch = str.charAt(i);
System.out.println(i + " : " + ch);
i++;
}
}
문자열을 입력하세요 > java
========= for문 ============
0 : j
1 : a
2 : v
3 : a
========= while문 ==========
0 : j
1 : a
2 : v
3 : a
public void sumOneToRandom() {
Scanner scanner = new Scanner(System.in);
System.out.print("정수를 1개 입력하세요. > ");
int random = scanner.nextInt();
int sum=0;
int i=1; // 1부터
while(i <= random) {
sum += i;
i++;
}
System.out.println("1부터 " + random + "까지의 합은 " + sum + "입니다.");
}
정수를 1개 입력하세요 > 10
1부터 10까지의 합은 55입니다.
중첩 while문
- 구구단 예시이다. int num=1;을 외부 while문에 선언할 수 없다. 2단을 마치는 동안 num 값에 10이라는 값이 저장돼 num <= 9 조건식에 더이상 해당되지 때문이다.
❗ 내부 while문의 초기식 위치가 중요하다!
public void printGugudan() {
int dan=2;
// int num=1;
while(dan <= 9) {
System.out.println("====== " + dan + "단 ======");
int num=1;
while(num <= 9) {
System.out.println(dan + " * " + num + " = " + (dan * num));
num++;
}
dan++;
System.out.println();
}
}
do~while문
- do~while문 표현식은 아래와 같이 쓴다.
- 일단 do를 실행하고 → 조건 확인은 while(조건식)에서 가리겠다는 문법상 무조건 한 번은 수행된다!
- while(조건식); 뒤에 세미콜론으로 마친다!
초기식;
do {
수행될 문장;
[증감식 or 분기문];
} while(조건식);
❗ while(true); 이면 무한루프 반복문이 된다.
❗ while(false); 이면 한 번 실행되고 끝마친다.
public void falseTest() {
do {
System.out.println("false;면 한 번 실행 후 종료...");
} while(false);
}
false;면 한 번 실행 후 종료...
- 키보드로 입력 받은 문자열이 exit일 때 프로그램을 종료하는 예시이다.
- 문자열 값 판단은 같다== 또는 같지 않다!=는 연산자로는 불가하다.
while(str == "exit");처럼 작성할 경우 문법적으로 에러는 발생하지 않지만, String 클래스에서 제공하는 equals() 메소드 str.equals();를 가지고 비교할 수 있다.
public void exitTest() {
Scanner scanner = new Scanner(System.in);
String str = "";
do {
System.out.print("문자열을 입력하세요. > ");
str = scanner.nextLine();
System.out.println("입력하신 문자는 " + str + "입니다.");
} while(!(str.equals("exit")));
System.out.println("Exit! 프로그램이 종료되었습니다.");
}
문자열을 입력하세요. > exit
입력하신 문자는 exit입니다.
Exit! 프로그램이 종료되었습니다.
✅ 반복문의 흐름을 이해할 수 있다.
✅ for문의 문법을 이해하고 사용할 수 있다.
✅ while문의 문법을 이해하고 사용할 수 있다.
✅ do~while 문의 문법을 이해하고 사용할 수 있다.
'Java' 카테고리의 다른 글
[JAVA] 4-3. 분기문 break, continue (0) | 2021.12.25 |
---|---|
반복문 수업 Quiz (0) | 2021.12.24 |
조건문 수업 Quiz (0) | 2021.12.24 |
조건문 수업 practice (0) | 2021.12.24 |
[JAVA] 4-1. 조건문 if, switch (0) | 2021.12.23 |