While
while (조건식) {
// 조건식이 true인 경우에만 코드블럭 내 코드가 실행된다.
}
// java에서는 if, While 등 조건식은 무조건 소괄호로 감싸줘야함.
// Swift에서는 소괄호 안 쓰는 경우도 많았는데 자바는 필수였고,
// 코틀린은 안 써도 되지만 자바에서 습관 때문에 보통 붙이는듯
public class While1_1 {
public static void main(String[] args) {
int count = 0;
count = count + 1;
System.out.println("count = " + count);
count++;
System.out.println("count = " + count);
count += 1;
System.out.println("count = " + count);
}
}
위 코드와 같이 동일한 작업을 여러번 반복해야 하는 경우에 반복문을 사용하면 효율적으로 변경할 수 있다.
public class While1_2 {
public static void main(String[] args) {
int count = 0;
while (count < 3) {
count++;
System.out.println("현재 count는 " + count);
}
}
}
리터럴값 하드코딩 대신 변수를 활용해보면 아래와 같은 코드도 가능하다.
public class While1_3 {
public static void main(String[] args) {
int sum = 0;
int startNum = 1;
int endNum = 5;
while (startNum <= endNum) {
sum += startNum;
System.out.println("합계는 = " + sum + ", startNum은 " + startNum + "입니다.");
startNum += 1;
}
}
}
Do While
조건식 검사부터 하는 것이 아니라 일단 한 번 실행하고(do) 조건식을 검사한다.
반복문을 돌리긴 돌릴건데 한 번이라도 코드 실행이 필요한 경우에 사용한다. (잘 못 보긴 했지만..)
public class DoWhile1 {
public static void main(String[] args) {
int a = 10;
while (a < 3) {
System.out.println("false이므로 출력하지 않습니다.");
}
//최초 한 번은 코드 블럭을 꼭 실행해야 하는 경우에 do_while문 사용
do {
System.out.println("현재 숫자는 = "+ a);
a += 1;
} while (a < 3);
}
}
Break
반복문은 기본적으로 종료 조건을 설정해줘야한다.
break를 만나면 루프문을 탈출한다.
public class Break1 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
// 조건식이 항상 참이기 때문에 break가 없으면 무한 루프가 발생함.
while (true) {
sum += i;
if (sum > 10) {
System.out.println("처음으로 10보다 높은 합계는." + sum + "마지막으로 더한 i는 " + i);
break;
}
i += 1;
}
}
}
Continue
continue를 만나면 아래 코드는 실행하지 않고(무시하고) 다시 반복문 조건식을 확인한다.
탈출은 아니고, 다음 루프로 바로 이동하는 것.
public class Continue {
public static void main(String[] args) {
int i = 1;
while (i <= 5) {
// 3만 출력 제외하기
if (i == 3) {
i++;
continue;
}
//continue를 만나면 아래 코드는 실행되지 않음
System.out.println("현재 i는 = " + i);
i++;
}
}
}
For
반복횟수가 한정되어 있는 경우 더 깔끔하게 코드를 작성할 수 있는 for문
for (초기식; 조건식; 증감식) {
// 조건식이 true인 경우에 실행되는 코드
}
for문의 실행 순서
1. 조건식의 실행 (반복 횟수와 관련된 변수를 선언하고 초기화 할 때 사용함) 초기식은 딱 1번만 사용된다.
2. 조건식의 검증(조건식이 true인 경우 코드를 실행하고, 거짓이면 for문을 빠져나간다.)
3. 스코프 내 코드를 실행한다.
4. 코드가 종료되면 증감식을 실행한다. 주로 초기식에 넣은 반복 횟수와 관련된 변수의 값을 증감한다.
5. 다시 조건식을 판단한다. (조건식이 false가 될 때 까지)
public class For1 {
public static void main(String[] args) {
for (int i=1; i <=10; i += 1 ) {
System.out.println(i);
}
}
}
while문으로도 완전 동일하게 코드를 작성할 수 있지만
for문의 경우에는 시작변수 초기화, 조건식, 증감식까지 한 줄에 작성할 수 있기 때문에 더욱 깔끔하다.
(while문은 조건식만 작성 가능하고, 초기변수는 따로 초기화 해주고 증감코드는 스코프 내부에 작성했던 것을 참고)
public class For2 {
public static void main(String[] args) {
int sum = 0;
int endNum = 10;
for (int i = 1; i <= endNum; i++) {
sum += i;
System.out.println("i = "+ i + ", sum = " + sum);
}
}
}
직관적이지는 않지만, 아래와 같이 while문처럼 동작하도록 할 수도 있다.
public class Break2 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
//초기식,조건식,증감식은 optional 세미콜론만 쓰면 for(true)와 같다.
for(;;) {
sum += i;
if(sum > 10) {
System.out.println("합이 10보다 크면 종료합니다 i = " + i + " sum = " + sum);
break;
}
i++;
}
}
}
//초기식과 증감식을 for 문에서 작성하는 경우
public static void main(String[] args) {
int sum = 0;
//초기식,조건식,증감식은 optional 세미콜론만 쓰면 for(true)와 같다.
for(int i= 1; ;i ++) {
sum += i;
if(sum > 10) {
System.out.println("합이 10보다 크면 종료합니다 i = " + i + " sum = " + sum);
break;
}
}
}
* i를 전역변수로 선언하느냐, 지역변수로 선언하느냐의 차이가 있음.
중첩 반복문(Nested Loop)
반복문 안에 반복문 안에 반복문 안에 반복문을 반복해서 쓸 수 있다.
물론 반복문이 너무 중첩되면 가독성이 떨어져서 지양해야 한다고 생각함..
public class Nested1 {
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
System.out.println("외부 for문 " + i + "를 시작합니다.️");
for (int j = 0; j < 3; j++) {
System.out.println(" 내부 for문 " + i + "-" + j + "번을 시작합니다.");
}
System.out.println("외부 for 문 " + i + "번이 종료되었습니다.");
System.out.println();
}
}
}
tip: 맥에서 개행 정리는 command + option + L이다. (Xcode에서 command + i 와 같은 기능)
명확히 정해진 횟수만큼 반복을 수행하고자 하면 for문을 선택해 보고,
조건이 복잡해지는 경우에는 while문을 고려해보자.
예시문제
10개의 짝수 출력하기
class WhileAnswer {
public static void main(String[] args) {
int num = 2;
int count = 0;
while (count < 10) {
System.out.println(num);
num += 2;
count += 1;
}
}
}
class ForAnswer {
public static void main(String[] args) {
int num = 2;
for (int count = 0; count < 10; count++) {
System.out.println(num);
num += 2;
}
}
}
구구단 출력하기
class multiplicationTables {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
System.out.println(i+" 단 시작합니다.");
for (int j = 1; j < 10; j++) {
System.out.println(i + " X " + j + " = " + i * j);
}
System.out.println();
}
}
}
단순 별찍기
class Stars {
public static void main(String[] args) {
int rows = 5;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++)
System.out.print("*");
System.out.println();
}
}
}
피라미드별찍기
class PyramidStars {
public static void main(String[] args) {
int height = 5;
for (int i = 1; i <= height; i++) {
//공백 출력
for (int j = 1; j <= height - i; j++) {
System.out.print(" ");
}
// 별 출력
// 1층은 1개, 2층은 3개, 3층은 5개와 같이 피라미드의 각 층에 별은 홀수개임
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
학습 출처
'JAVA > Java Start' 카테고리의 다른 글
7. Scanner 유저인풋 (0) | 2024.01.24 |
---|---|
6. 스코프(Scope), 타입캐스팅(Type Casting)_형변환 (0) | 2024.01.21 |
4. 조건문(if, switch, 삼항 연산자) (0) | 2024.01.15 |
3. 연산자(산술, 문자열, 우선순위, 증감, 비교, 논리, 대입) (0) | 2024.01.14 |
2. 변수(variable)_(package, psvm) (0) | 2024.01.07 |