본문 바로가기

LECTURE/# java basic

[초급 JAVA]자바 제어문 - for 문 (단일 for 제어문 / 다중 for 제어문)

반응형

자바 제어문 - for 문 (단일 for 제어문 / 다중 for 제어문)


Programming

 
ExamFor.java
package exam_control_statements;
public class ExamFor {
public static void main(String[] ar) {
// 이번에 소개시켜드릴 제어문은 for입니다.
// for는 크게 당일 for 제어문과 다중 for 제어문으로 나뉩니다.
// 단일 for 제어문 형식
// for(초기화영역;조건부영역;증감부 영역){
// 반복으로 실행되는 내용부;
// }
for (int i = 0; i < 10; i++) {
System.out.print("#");
}
System.out.println();
// 다중 for 제어문 형식
// for(초기화영역;조건부영역;증감부영역){
// 내용;
// for(초기화영역;조건부영역;증감부영역){
// 내용;
// }
// 내용;
// }
System.out.println();
for (int i = 0; i < 10; i++) {
for (int j = 10 ; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
//기타 형식
// for(변수 선언 부 : 배열){
// 내용;
// }
String[] arr = new String[10];
int[] index = new int[10];
for (int i = 0; i < arr.length; i++) {
int a = (int) ((Math.random() * 10) + 1);
index[i] = a;
arr[i] = "Random Number : " + a;
}
for (String str : arr) {
System.out.println(str);
}
System.out.println();
//응용 - 제어문을 활용해서 1부터 10까지 임의의 숫자를 중복없이 출력
for (int i = 0; i < arr.length; i++) {
boolean bool = false;
int a = (int) ((Math.random() * 10) + 1);
for (int j = 0; j < i; j++) {
if (index[j] == a) {
bool = true;
}
}
if (bool == true) {
i--;
continue;//밑으로 진행하지않고 포함하는 반복문(for,while,do~while)의 첫 시작부분으로 돌아간다.
}
index[i] = a;
arr[i] = "not duplicate Number : " + a;
}
for (String str : arr) {
System.out.println(str);
}
}
}


for문은 if문과 더불어 프로그래밍을 하면서 가장많이 쓰는 제어문 중 하나 입니다. 어떠한 행위를 반복하고 싶을 때 사용하여서 반복문이라고도 합니다.

단일 for 제어문

for문은 for 옆에 () 안에서 내용을 몇번 반복 할 지 코더가 정할 수있습니다. 구분은 세미콜론 ';'으로 하고 선언부 ; 조건부; 증감부 로 나눌 수있습니다. 선언부에서는 for문안에서 쓰일 변수를 초기화 합니다. int i = 0 이라는것은 int 형 i를 0으로 초기화 하여서 사용한다 라는 뜻입니다. 선언부는 제일 처음에만 실행되고 반복될때는 실행되지 않습니다. 조건부는 true 와 false를 리턴 합니다. true가 리턴이되면 내용부로 내려가 내용을 실행합니다. 증감부는 말 그대로 변수를 증가시키거나 감소시킴으로써 조건의 대상이되는 변수를 변화시키는 역할을 합니다. 증감부에서 증감된 변수 i 는 다시 조건부로 가서 비교대상과 비교됩니다. 변수가 변화되지않으면 반복문은 끝없는 roop상태 즉 무한대로 반복하는 무한루프에 빠지게됩니다. 

그림으로 본 for문의 동작 순서입니다.

1번 - > 2번 - > 3번 - > 4번 - > 2번 - > 3번 ...

이런식으로 최초에 한번 선언부에서 int i를 0으로 초기화하고 조건부에서 비교대상과 int i를 비교합니다. 그리고 내용부의 내용을 실행하고 증감부로 올라가 int i를 증감시키고 다시 조건부에서 비교하여 True이면 내용부의 내용을 실행하고 False 이면 for문을 빠져나옵니다. 

다중 for 제어문

모든 원리는 for문과 똑같습니다. 다른점은 for문안에서 for문이 실행된다는 점입니다. 저는 두개만 썼지만 필요에따라 여러개를 쓸 수도있겠지만, 몇번 반복될지 계산하려면 머리가아프겠죠? ^^; 다중 for문을 이용하면 '*' 을 출력하여 별모양도만들 수 있습니다. 직접한번 만드는것에 도전하는것도 for문을 이해하기에 좋습니다. 

기타 문형으로쓰이는 for제어문은 이런것도 있다 알아두시라고 적어놨습니다. 초급단계에서는 쓸일이 별로없으므로 이해는 안하셔도되지만, 나중에 ArrayList같은 걸 배우면 같이 많이 쓰므로, 그때가서 쓰는걸 연습해도 늦지않습니다.^^ 일단 기본 for문부터 열심히 사용합시다~

위 소스 주석에 기본적인 설명은 모두 적어놓았으니 참고 하시면 되겠고, 추가적으로 위 소스에서 쓰인 몇가지 생소한 것들에 대해 설명하겠습니다. 

String[] arr = new String[10];

아직 배열([ ])에 대해서는 설명드린 것이 없습니다. 반복문을 효과적으로 쓰고 결과물을 보여드리기 위해 설명하지 않은 배열을 썼습니다. 배열이란 간단히 말해, 여러개의 데이터를 순서대로 나열해 놓은 집합입니다. 배열에 대해서는 추후에 자세히 포스팅 할 것이니, 지금은 그런게 있다보다 하고 넘어가시면 되겠습니다.

continue;

continue 는 제어문안에서 또 순서를 제어하고 싶을 때 사용합니다. 대부분 쓰일 때 if문안에서 쓰이게 되며, 프로그램은 continue를 만나게되면 제어문의 조건부로 다시 올라가게 되죠, continue밑에 내용은 실행하지 않고요. 

1
2
3
4
5
6
7
8
for(int i = 0; i < 10 ; i++){
    if(i == 5){
        continue;
    }
    
    System.out.println(i+"번");
 
}
cs

위를 코딩해보세요. for문은 i가 0부터 10이될때까지 계속 반복하여 i+"번" 반복하여 출력하지만, if문에서 i 가 5와 같을때 continue를 실행 하라고 하였으니 i가 5일 때 System.out.println(i+"번"); 를 만나지않고 바로 위로 올라갑니다. 때문에 결과는 5번을 빼고 출력이 되겠죠.

저번시간에 썼던 switch문을 기억하시나요? 거기서 break; 도 마찬가지로 제어문의 순서를 제어하는 역할을 합니다. continue와는 다르게 break을 만나게되면 for문의 반복 수가 몇이 남아있든 for문을 끝내게 합니다. 

1
2
3
4
5
6
7
8
for(int i = 0; i < 10 ; i++){
    if(i == 5){
        break;
    }
    
    System.out.println(i+"번");
 
}
cs

위를 코딩해 보세요. i가 5와 같을 때 break;을 만나게되므로 for문은 끝나게됩니다. 때문에 출력되는 값은 0번 1번 2번 3번 4번 이 되겠지요?


Closing

소스는 모두 올려놓았습니다. github 링크는 나중에 좀더 자료가 많아지면 수정해서 올려놓도록하겠습니다. 일단 copy&paste를 해서 결과를 눈으로 확인하시고 설명을 보면서 직접 코딩을 해보세요. 대부분의 설명은 소스안에 주석에 써놓았으니, 주석을 참고하여 설명을 봐주세요.



반응형