for문, if와for문, 중첩for문
초기값은 변수가 처음 시작하는 수,
논리형_조건문은 몇 번 반복할 것인가,
증감문은 변수가 어떻게 반복될 것인가라고 생각하면 된다.
/* 무한루프
//탈출값이 없음으로 별은 계속 출력된다.
for( 초기값 ; 논리형_조건문 ; 증감문 ) {
System.out.println("*");
}
*/
for 제어문은 반복제어문이다.
반복문이란 어떤 코드가 반복적으로 실행되도록 만들어 줄 때 사용되며,
for문은 반복 횟수를 알고 있을 때 주로 쓰인다. 아래 사진과 같이 for문의 예시를 들 수 있다.
여기서 for문은 논리형 조건문이 flase 의 값이 나올때까지 반복되는데
int i = 0 은 정수형 변수 i는 0이라고 초기값을 선언해주었고
i < 5 은 i가 5 미만의 숫자가 나올 때까지 참 그리고 5는 거짓이라는 논리형 조건문이며
i++ 은 i가 1씩 증가한다는 뜻이다.
System.out.println( ) 가 ( )을 print에 ln이 붙었기 때문에 줄바꿈하면서 출력하라는 뜻이기에
한줄에 별 하나가 (0~4 까지 총 다섯 번) 다섯줄이 나오게 된다.
아래 코드에 대한 for문의 연산 방식에 대해서 알아보자.
System.out.println("start!!!");//0
for(
int j=0;//초기값 1
j<5;//조건문 2
j++ //증감문 3
) {
System.out.print("* ");//4
}//for j
System.out.print("End!!!");//5
//0-1-2(true)-4-3-2(false)-5
//0-1-2(true)-4-3-2(true)-4-3-2(true)-4-3-2(true)-4-3-2(false)-5
위 수식의 for문은 start!!! 출력 -초기값 - 조건문(true) - 증감문 - 별 출력 - 다시 조건문(true) - 증감문 - 별 출력을 반복하다가 조건문의 값이 false이 될때 까지 총 5개의 별(j가 0~4이므로)을 출력 후 End!!! 출력으로 종료된다.
(별이 n줄 만큼 출력되는 for문)
int n=5;
for(int j=0; j<n; j++){
System.out.printf("\n");
}
(n만큼 별이 출력되는 for문)
for(int i=0; i<n ; i++ ) {
System.out.print("* ");
}
int n=5;
for(int j=0; j<n; j++){
for(int i=0; i<n ; i++ ) {
System.out.print("* ");
}
System.out.printf("\n");
}
이 코드는 for문이 중첩으로 되어 있는데 별이 n줄 만큼 한 번 출력할떄마다 줄을 바꾸는 for문에 < 정수형 변수 n만큼 별이 출력되는 for문 >을 넣었다. 이런 코드는 별들을 한 뭉탱이로 가정할 때 정수형 변수 n의 값만 변경하면서 다양한 크기의 별뭉탱이를 얻을 수 있다.
(두개의 for문이 정수형 변수 n을 공통으로 조건문으로 사용하여 같이 늘어난다.)
int n=5;
for(int j=1; j<=n ;j++){
for(int i=0; i<j; i++) {
System.out.print("* ");
}
System.out.println();
}
이 코드도 마찬가지로 중첩 for문인데 위와 달리 조건문이 공통이 아닌, 이 코드도 마찬가지로 중첩 for문인데 위와 달리 조건문이 공통이 아닌, 1로 시작하는 변수j가(j는 하나씩 늘어나는) 정수형 변수 n(5)와 같을때까지 1씩 증감하며 줄을 바꾸는 for문에 < 0이 초기값인 정수형 변수 i가 j보다 작을때 별을 하나씩 늘려서 출력한다는 for문 >이 들어있는 코드다. 따라서 줄이 5번 늘어날수록 별도 같이 5번 늘어난다.
int n=5;
for(int j=n; j>=1 ;j--){
for(int i=0; i<j ;i++) {
System.out.print("* ");
}
System.out.println();
}
자, 그러면 이 코드는 5로 시작하는 변수j가 1과 같을 떄까지 1씩 감소되면서 줄을 바꾸는 for문 안에 < 0으로 시작하는 변수 i가 처음에는 j가 5니까 별을 다섯개 출력하는데 반복될수록 j는 감소하니까 별이 줄어드는 for문이 > 담겨 있다.
for(int i=1; i<=9 ; i++){
System.out.printf("%d * %d = %2d\n", 2, i, 2*i);
}
이 코드는 1로 시작하는 변수i가 9와 같아질떄까지 1씩 증가하면서 반복할건데 "%d x %d = %2d\n", 2, i, 2xi 을 출력한다.
여기서 %d 는 10진수가 들어가는 문자니까 "%d x %d = %2d\n"은 "10진수 x 10진수 = 10진수 줄바꿈 이고
printf("%d x %d = %2d\n", 2, i, 2xi) frintf가 있으면
("1블라 x 2블라 = 3블라",1 ,정수형 변수, 2x정수형 변수
1블라는 ""뒤에오는 첫번째 꺼 1이고 2블라도 두번쨰인 정수형 변수 3블라는 세번쨰로오는 2x정수형 변수가 온다.)
따라서 문자열을 출력하는데 2 x 변수i = 2x변수i 가 i가 1씩 증가하면서 2x변수i끝에는 줄바꿈도 하는게 9번(1~9 총9번) 출력된다.
for(int dan=1; dan<=9 ; dan++){
for(int i=2; i<=9 ; i++) {
System.out.printf("%d*%d=%2d\t", i, dan, dan*i);
}
System.out.println();
}//for-dan
그럼 이 코드는 1로 시작하는 변수dan이 9와 같아질 떄까지 증가하면서 줄바꿈되는 for문에 < 2로 시작하는 변수가 9와 같아질때까지 1씩 증가하면서 System.out.printf("%d x %d = %2d\t", i, dan, danxi); 이 코드를 출력하는 for문 >이 담겨 있다.
(전체적으로만 보면 for문 별이 다섯개 다섯줄 처럼 아래로 갈수록 옆으로 갈수록 똑같이 증가한다.) 자 대입을 해보면
System.out.printf("%d x %d = %2d \t", i, dan, danxi);은
변수dan은 1 일떄 변수i는 2고 \t은 4번 띄어쓰기니까 2 x 1 = 1x2 를 4번 띄어쓰기하고 출력하는 것이고
2 x 1 = 1x2 부터 마지막 변수dan은 9이고 변수i도 9가 될 때까지 4번 띄어쓰기 하면서 계속 출력되는데 변수i가 9가 될떄마다 줄 바꿈이 된다는 것이다.
for (int i=1; i<=100; i++) {
if(i%2==0){
System.out.println(i);
}
}
이 코드는 1로 시작하는 변수 i 가 100이 될때까지 1씩 증가하는데 만약 변수 i 값이 2로 나누었을 때 나머지가 0과 같다면 변수 i 를 출력한다는 반복문이다. 1부터 100까지의 숫자 중 짝수만 2로 나누었을때 나머지가 0이기에 짝수만 출력할 수 있다.
for (int i = 1; // 1
i <= 100; // 2
i++) {// 3
if(i%2==0){//4
continue;//5
}
System.out.println(i);//6
}
이것 또한 마찬가지로 1부터 시작하는 변수 i 가 100이 될때까지 1씩 증가하는데 만약 변수 i 값이 2로 나누었을 때 나머지가 0과 같다면 5번으로 넘어가는데 continue로 인해 건너뛰고 오히려 홀수만 출력된다.