티스토리 뷰

 

 

1. for

반복 횟수가 명확한 경우 사용. 특정 횟수만큼 반복

for (초기식; 조건식; 증감식){
	//실행문 : 조건이 true일 동안 반복 실행
}

(1) for문

-type_1

int i;
for(i=1; i<=10; i++) {
    System.out.println(i);
}
System.out.print("for end "+i+"\n");

└for문 바깥에서 선언된 변수 i는 for문 밖에서도 쓸 수 있음.

 

-type_2

초기식, 증감식 : 콤마(,)로 연결해서 여러 개 쓸 수 있음.

조건식 : 한 덩어리. 논리연산자 같은 걸로 묶어줌.

for(int j=1, k=1; (j+k)<10; j++, k++) {
    System.out.println("j : "+j+", k : "+k+", j+k : "+(j+k));
}

└for문 안에서 선언된 변수는 for문 안에서만 유효함.

 

-type_3

조건식을 생략하면 무조건 true라 무한반복함.

for(;;) {
    System.out.println("java");
}

 

(2)  for-each문

values에 있는 값을 i에 할당. values의 값이 있는 동안 반복문 실행.

int[] values = {15, 43, 57, 20, 5, 64, 75, 94};
		
for(int i:values) {
    System.out.println("values : "+i);
}

 


2. while

반복 횟수가 불특정할 때

초기식
while(조건식){
   실행문;
   증감식;
}

-type_1 : 기본

int i = 1;
int sum = 0;
while(i<=10) {
    sum += i;  //sum과 i의 값을 더해 sum에 대입
    i++;
}
System.out.println(sum);  // 55

-type_2 : 

입력받은 소문자 알파벳을 대문자로 변환하여 출력. q가 입력되면 반복문 종료.

char ch1='a';
char ch2='A';
System.out.println((int)ch1);  //97
System.out.println((int)ch2);  //65  알파벳 대문자와 소문자는 32만큼 차이남.
System.out.println((char)(ch2+1));  // B

Scanner sc = new Scanner(System.in);
String str = "a";
while(!str.equals("q")) {
    System.out.println("Enter alphabet");
    str = sc.next();
    char ch = str.charAt(0);
    if(ch >= 'a' && ch <= 'z') {
        System.out.println((char)(ch-32));
    }else {
        System.out.println(ch);
    }

 


3. do-while

무조건 한번은 시행됨, 참(true), 거짓(false) 상관없이.

//do-while
int i = 10;
do{
    System.out.println(i);
    i++;
} while(i<10);    // 10

//while
int j = 10;
while(i<10){
  System.out.println(i);
    i++;
}    //아무 것도 출력 안 됨.

 


4. break

switch - case문 또는 반복문에서 사용

자신을 감싸고 있는 가장 가까운 반복문을 빠져나감.

int sum = 0;
for(int i=0; ; i++) { // 종료 조건 생략
    sum += 1;
    if(sum>100) break; // 종료 조건
    System.out.println(sum);
}

└sum의 값이 100을 초과할 때 반복문 탈출(break)

 


5. continue

특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용.

바로 다음 실행문 스킵. 다음 반복문으로 넘어감(증가식 이동해 조건 검토한 후 실행문)

for(int i=1; i<100; i++) {
    if(i%3==0){    //3으로 나누었을 때 나머지가 0(3의 배수)
        continue;
    }System.out.println(i);
}

└1 ~ 99까지 숫자 중 3의 배수는 제외하고 출력

 

 


6. 반복문 예제

(1) 1 ~ 100까지 합

int sum = 0;
    for(int i=1; i<=100; i++) {
        sum += i;
    }
    System.out.println(sum);

└변수 선언 후 초기화해줘야 이후에 값을 할당할 때 오류가 안 뜸.

초기화하지 않고 for문에서 할당(값 대입)하려고 했더니 오류 떴음.

 

(1-1) 1 ~ 100까지의 소수 출력

소수 : 1과 자기자신으로만 나뉘는 수

for(int i=2; i<=100; i++) {   //잘못된 알고리즘
    for(int j=2; j<=i; j++) {
        if(i%j==0) {
            System.out.println(i);
        }
    }
}

└12의 경우 2, 3, 4, 6으로도 나머지가 0이므로 전부 출력된다. 소수가 아닌 수도 출력되므로 잘못된 알고리즘.

for(int i=2; i<=100; i++) {
    boolean flag = false;
    for(int j=2; j<i; j++) {
        if(i%j==0) {
        //자기자신보다 작은 수에서 나누어지면 소수 x
            flag = true;
            break;  //가장 가까운 반복문 탈출
         }
     } //for
     if(flag) { // flag가 true면 continue로 실행문 스킵하고 반복문 증가식으로 돌아감.
         continue;
     }
     System.out.print(i+" ");
}

└flag가 true면 자기 자신보다 작은 수에서 나누어진다. 소수가 아니다. 그러니까 출력되면 안 됨.

마지막 if문의 조건식에서 if(flag ==true)일 때 수를 출력하는 실행문을 스킵한다. 그런데 if(flag) 자체가 어떻게 if(flag==true)랑 똑같은 의미가 되는가? ==true를 적어주지 않았는데도.

아! 애초에 if문이 조건식이 true면 블록 안의 실행문 실행임.

처음 flag를 false로 둔 뒤, 소수가 아닌 수를 true라고 해서 참일 때, 출력문을 스킵하게 만들었음. 거짓이면 for문, if문 건너뛰어서 출력하게 된 거고.

 

(2) 5의 배수 덧셈

int sum3 = 0;
    for(int i=0; i<=100; i++) {
        if(i%5 == 0) {
            sum3 += i;
        }
    }
    System.out.println(sum3);  //1050
    
//증가식에 조건
for(int i=0, sum=0; i<=100; i+=5){
    sum += i;
    System.out.println("i : "+i+", sum : "+sum);
}

 

(3) 짝수합, 홀수합

int eSum = 0;
int oSum = 0;
    for(int i=1; i<=100; i++) {
        if(i%2==0) {
            eSum += i;
        }else {
            oSum +=i;
        }
     }
     System.out.println("짝수 합 "+eSum);  //2550
     System.out.println("홀수 합 "+oSum);  //2500

 

(4) 구구단 출력

2단부터 9단까지 출력

for(int i=2; i<10; i++) {
    for(int j=1; j<10; j++) {
        System.out.print(i+"*"+j+"="+(i*j)+" ");
    }
    System.out.println();
}

 

(5) 아래와 같은 표? 행렬? 만들기

1  2  3  4  5
2  3  4  5  6
3  4  5  6  7
4  5  6  7  8
5  6  7  8  9
for(int i=1; i<=5; i++) {
    for(int j=i; j<(i+5); j++) {
        System.out.print(j+" ");
    }
     System.out.println();
}

 

(6) 별의 개수 점점 증가, 감소

*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*
//점점 증가
for(int i=1; i<=5; i++) {
    for(int j=1; j<=i; j++) {
        System.out.print("* ");
    }
    System.out.println();
}

//점점 감소
for(int i=5; i>0; i--) {
    for(int j=i; j>0; j--) {
        System.out.print("* ");
    }
    System.out.println();
}

//점점 감소_2
for(int i=0; i<10; i++){
    for(int j=0; j<10-i; j++){
        System.out.print("*");
    }
    System.out.println();
}

 

(7) 가운데 정렬 : 별의 개수 점점 증가, 감소, 다이아몬드형

      *
    * * *
  * * * * *
* * * * * * *
* * * * * * *
  * * * * *
    * * *
      *
      *
    * * *
  * * * * *
* * * * * * *
  * * * * *
    * * *
      *
for(int i=1; i<=4; i++) {
    for(int j=1; j<=4-i; j++){
        System.out.print(" ");
    }
    System.out.print("*");
    System.out.println();
} // 별이 대각선으로 1개식만 출력...
//피라미드
for(int i=0; i<4; i++) {
    for(int j=-4; j<=4; j++) {
        if(j>=-i && j<=i) {
            System.out.print("*");
        }else {
            System.out.print(" ");
        }
    }
    System.out.println();
}

//역 피라미드
for(int i=4; i>0; i--){
    for(int j=-4; j<=4; j++){
        if(j>= i && j<= i){
            System.out.print("*");
        }else{
            System.out.print(" ");
        }
    }
    System.out.println();
}

//다이아몬드
for(int i=-4; i<=9; i++){
    for(int j- =4; j<=4; j++){
        if(Math.abs(j) <= (9-(Math.abs(i)))){
            System.out.print("*");
        }else{
            System.out.print(" ");
        }
    }
    System.out.println();
}

└피라미드의 정 가운데 0, 좌우 극점.

 

 

'수업 > └Java' 카테고리의 다른 글

[CH05_2]참조 자료형 : String  (0) 2022.01.31
[CH05_1]참조 자료형 : 배열(Array)  (0) 2022.01.31
[CH04_1]조건문 실습 예제_책  (0) 2022.01.30
[CH04_01]제어문 : 조건문  (0) 2022.01.30
[CH03]연산자  (0) 2022.01.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함