자바 for 문 을 while 문 으로 - jaba for mun eul while mun eulo

오늘은  제어문 중 하나인 반복문을 배워 볼 것이다

반복문은 꼭 알아야 하는 중요한 개념이라서 

제대로 이해하고 알고 가자.

for문

for문은 조건에 맞춰서 조건이 참일 때 내가 원하는 만큼 코드를 반복할 수 있다

조건이 참(True) 일 때만 수행된다

조건이 거짓(False)이 되면 반복문에서 빠져나온다.

for문법

for(초기화식; 조건식; 증감식;){ 조건이 참일때 실행 문장; }

이렇게 보면 어려울 수 도 있으니까 직접 값을 대입해서 알아보자

예제

for (int i = 0; i < 5; i++) { System.out.println("for문 " + i); }

위 예제를 보면 초기화식에 int형인 i를 초기화해준다.

조건식에는 i의 값이 5가 되기 전까지 for문이 돌릴 수 있도록 조건을 세워준다

다음으로 for 조건식이 한번 돌 때 증감식으로 i값을 1씩 더 해준다.

실행결과

실행결과 값을 볼 수 있듯이 i값이 5가 되기 전까지 도는 것을 볼 수 있다.

while문

while문도 for문과 비슷하다. while문은 조건이 참일 때 무한으로 반복한다는 의미이다.

while문법

while(조건식) { 조건이 참일 때 실행할 명령문; }

문법을 보고 예제를 보자

예제

int i = 0; while (i < 5) { System.out.println("while 문 i값 : " + i); i++; }

조건식에 i가 5보다 때 작을 때 계속 명령문이 실행할 수 있도록 조건을 세웠다.

i값이 현재 0이므로 조건은 참이다 명령문이 실행될 것이다.

다음에 i값을 증감시켜 주지 않으면 while문은 무한으로 돌아가게 것이다.

증감 연산자인 i++를 해줘야 i값이 계속 증가될 거고 

i가 5가 되기 전까지 while문은 계속 반복할 것이다.

실행결과

실행결과처럼 i값이 증가하다가 i가 5가 되기 전에 멈춘 것을 볼 수 있다.

do - while문

do-while문은 while문이랑 비슷한데 한 가지 다른 점이 있다 

do-while문은 조건이 거짓이라도 한 번은 무조건 수행한다.

예제를 통해 알아보자

예제

int i = 0; do { System.out.println("안녕 " + i); i++; } while (i < -1);

예제를 보면 i 값은 현재 0이 들어가 있다.

while문의 조건은 i가 -1보다 작을 때 돌 수 있게 조건을 세워 놓았는데

do-while문은 무조건 한 번은 실행된다.

실행결과

실행결과를 볼 수 있듯이 한 번은 무조건 실행된 것을 볼 수 있다

break문

break문은 말 그대로 멈춘다는 뜻입니다. break가 써진 곳의 가장 가까운 반복문에서 빠져나오게 됩니다.

예제

int i = 0; while (true) { // 0 1 2 3 4 if (i == 5) { System.out.println("i의 값이 5라서 무한루프를 종료합니다."); break; } System.out.println("i의 값 : " + i); i++; }

예제를 통해 쉽게 이해해보자

무한루프인 while문을 사용해서 break를 걸어보자

i가 0부터 시작해서 i계속 증가하도록 조건을 세웠다

i값이 계속 증가하다가 i값이 5가 되었을 때 while문에서 빠져나올 수 있도록 break를 걸어준다

실행결과

i값이 5가 되어서 무한루프가 종료된 것을 볼 수 있다.

continue문

continue문은 skip이라고 할 수 있다

continue밑에 있는 아래 코드들을 수행하지 않고 다음 조건으로 넘어간다

for문일 경우 continue문장이 실행되면 증감식으로 간다.

while문인 경우는 조건식으로 이동한다.

continue문은 반복문 안에서만 사용 가능하다.

예제를 통해 알아보자

예제

for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; } System.out.print(i + " "); }

continue문을 이용하여 i값이 2로 나누어지는 수는 continue문이 실행되도록 하였다

i값이 2로 나누어지는 수면 continue문이 실행되어 밑에 있는 문장을 실행하지 않고

증감식으로 넘어가는 것을 볼 수 있다.

실행결과

실행결과를 보면 2로 안 나누어지는 수만 출력된 것을 볼 수 있다.

이번 배운 반복문은 매우 중요한 개념이다.

많이 연습해보고 손에 익힐 수 있도록 공부했으면 좋겠다.

1.1 for문

for문은 반복 횟수를 알고 있을 때 적합하다. 또한 구조가 직관적이라 이해하기가 쉬운 특징을 가지고 있다. 

1) 구조

for(초기화; 조건식; 증감식){
  //③ 조건식이 참일 때 수행될 문장들을 적는다.
}

2) for문의 수행 순서

① 조건문의 '초기화'

  -반복문에 사용될 변수를 초기화 하는 부분이며 처음 한번만 수행된다.

② 조건문의 '조건식'

  -이때 조건식의 값이 참이면 반복을 계속 진행 → 조건문의 조건식이 참인 동안에는 반복을 계속한다

  -조건식의 값이 거짓이면 for문을 빠져 나간다.

③ 수행될 문장

④ 조건문의 '증감식'

  -반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식으로 매 반복마다 변수의 값이 증감식에 의해 변하고 결국 조건식이 거짓이 되어 for문을 벗어나게 된다. 변수의 값을 1씩 증가시키는 연산자 '++'이 증감식에 주로 사용되지만 다양한 연산자들로 증감식을 작성할 수도 있다.

for문의 사용 예제1) 별(*)찍기

import java.util.Scanner; //for문을 이용한 예제 //1. 별(*)찍기: 사용자가 입력하는 개수에 따라 별을 점진적으로 찍는 프로그램 public class forEx1 { public static void main(String[] args) { int num = 0; System.out.println("*을 출력할 라인의 수를 입력하세요 >> "); Scanner scanner = new Scanner(System.in); String tmp = scanner.nextLine(); //화면을 통해 입력받은 내용을 tmp에 저장 num = Integer.parseInt(tmp); //입력받은 문자열(tmp)을 숫자로 변환 for(int i = 0; i <num; i++) { for(int j = 0; j <= i; j++) { System.out.print("*"); } System.out.println(); } } }

for문의 사용 예제2) 구구단

//중첩 for문을 이용해서 구구단 만들기 public class forGugudan { public static void main(String[] args) { for(int i = 2; i <= 9; i++) { //외부 for문이 1번 반복될 때, for(int j = 1; j <=9; j++) { //내부 for문은 1~9까지 반복된다 System.out.printf("%d X %d = %d%n", i, j, i*j); } } } }

1.2 향상된 for문

JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가되었다. 다만 이 for문은 일반적인 for문과 달리 배열(Array)이나 컬렉션에 저장된 요소들을 읽어 오는 용도로만 사용할 수 있다는 제약이 있다.

기존 for문과 향상된 for문을 간단 비교해보자.

public class forEx2 { public static void main(String[] args) { int [] arr = {10, 20, 30, 40}; //1. 일반 for문 for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } //2. 향상된 for문 for(int tmp : arr) { System.out.println(tmp); } } }

2.1 while문

① while문은 for문에 비해 구조가 간단하다.

② if문처럼 조건식과 블럭{}만으로 이루어져 있다.

③ while문은 조건식이 참(true)인 동안 조건식이 거짓이 될 때까지 블럭{} 내의 문장을 반복한다.

④ for문과 달리 반복 횟수가 정해져 있지 않을 때 사용하기 적합하다.

1) while문의 기본 구조

                 ①
while(조건식){
  //② 조건식의 연산 결과가 참(true)인 동안 반복될 문장들을 적는다.
}

2) while문의 수행 순서

① 조건식을 평가한다(참인지, 거짓인지)

② 조건식이 참이면 ②의 수행문을 수행하고, 거짓일 경우에는 블럭{} 밖으로 나간다.

//while문 예제-1) public class wileEx1 { public static void main(String[] args) { int i = 5; //0~4까지의 값을 가지고 있으므로 5번 반복된다. while(i-- !=0) { System.out.println(i+ "조건식의 참 여부에 따라 주어진 횟수를 반복"); } } }

2.2 do-while문

do-while문은 while문의 변형으로 기본 구조는 while문과 동일하지만 수행될 문장이 먼저 오고 그 다음 참, 거짓 여부를 판단하는 블럭{}이 온다. 그래서 while문과 반대로 블럭을 먼저 수행한 후에 조건식을 평가한다. 즉, do-while문은 조건식이 참이 아니라도 최소 한번은 수행될 것을 보장한다.

1) 구조

do{
  // 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while(조건식);

do-while문의 사용 예제

import java.util.Scanner; //do-while문 예제 //=> 임의의 값을 받아 입력한 값이 맞을 때까지 반복하는 예제 public class doWhileEx { public static void main(String[] args) { int input = 0; // 값을 입력 하여 저장하는 변수 int answer = 0; // 랜덤 값을 저장하는 변수 answer = (int) (Math.random() * 100) + 1; // 1~100사이의 임의의 수를 저장 Scanner scanner = new Scanner(System.in); do { System.out.println("1과 100사이의 정수를 입력하세요 >> "); String tmp = scanner.nextLine(); input = Integer.parseInt(tmp); if (input > answer) { System.out.print("더 작은 수로 다시 입력주세요."); } else if (input < answer) { System.out.print("더 큰 수로 다시 입력해주세요."); } } while (input != answer); System.out.println("정답입니다."); } }

2.3 continue문

1) continue문의 특징

① continue문은 반복문 내에서만 사용할 수 있다.

② 반복이 진행되는 동안 continue문을 만나면 반복문의 끝으로 이동해 다음 반복문으로 넘어간다.

③ for문의 경우 증감식을 통해서, while, do-while문의 경우 조건식으로 이동한다.

④continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break과 다르다.

⑤ if문과 함께 주로 사용되며 특정 조건을 만족하는 경우 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가 계속 진행한다.

⑥ 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.

continue를 사용한 예제)

  -1~10 사이의 숫자들 중 3의 배수인 것은 제외하는 예제

public class continueEx { public static void main(String[] args) { for (int i = 0; i <= 10; i++) { if (i % 3 == 0) continue; System.out.println("3으로 나눈 나머지가 0일 때의 몫은 "+ i +" 입니다."); } } }

Toplist

최신 우편물

태그