이안의 평일코딩

JAVA의 정석 11일차 - do~while, break, continue, 중첩 for문 본문

Back-end/Java

JAVA의 정석 11일차 - do~while, break, continue, 중첩 for문

이안92 2020. 6. 29. 12:49
반응형

2020.06.29(월)

1. do~while => 반드시 한 번 이상을 수행해야 할 때

1) 형식

 초기값 ==> int i = 1; ① 한 번만 수행

 do {

       //반복 수행문장 출력

       System.out.print(i+" ");

       //증가식

       i++;

 } while(조건식); ==> i<=5;

 

i=1

   1 // i++ (i=2) -> i<=5 비교 true -> do안으로 이동

i=2

   1 2 //  i++ (i=3) -> i<=5 비교 true -> do안으로 이동

.

.

i=5

   1 2 3 4 5 // i++ (i=6) -> i<=5 비교 true -> do안으로 이동

 

2) 구구단

더보기

import java.util.*;

public class 구구단 {

 public static void main(String[] args) {

   // 변수 설정

  int user = 0; // 사용자가 입력한 값 저장 메모리 공간

  int i = 1; // 1~9까지 변경하는 변수 -> 9번 수행

 

   // 키보드 입력값 받기 (BufferedReader -> 예외처리)

  Scanner scan = new Scanner(System.in);

   // 모든 클래스는 메모리에 저장할 때 new 이용한다

   // 예외 -> Math.random() -> static메소드 : 시작과 동시에 자동 저장

  System.out.print("2~9까지 사이의 정수 입력:");

공백, 엔터시에 값을 메모리 저장

  user=scan.nextInt();

   // 사용자가 키보드로 입력한 정수를 읽어와서 저장 -> user라는 공간

  do {

      // printf -> %n, \n -> 다음줄에 출력

     // print, println -> \n

    System.out.printf("%d * %d = %d\n",user,i,user*i);

    i++;

  }while(i<=9);

 }

}

 

2. 반복제어문

 - break -> 반복문을 종료할 때

 - continue -> 특정부분을 제외하고 싶은 경우

 - 조건문과 같이 사용한다 (if)

 - * break, continue는 한개의 반복문만 제어할 수 있다

   * break -> 반복문 전체 (for, do~while, while), switch

   * continue -> 반복문에서만 사용이 가능 

   * return -> 보류 (메소드 종료)

 

   * break -> while, for, do~while이 동일

   * continue -> while(조건식으로 이동),

                      for(증가식으로 이동)

 

> 1~10까지 출력 -> 5일때 종료 -> break; (1~4만 출력)

더보기

for(int i=1; i<=10; i++) {

 // 조건문 5일때

 if(i=5)

      // 종료

      break; // 1=5면 반복문 종료

 System.out.print(i+" ");

}

==> 1 2 3 4

 

vs 출력을 먼저 위로 올리면 순차적으로 출력되기 때문에 동일해짐

 

for(int i=1; i<=10; i++) {

 System.out.print(i+" ");

  if(i=4)

   break;

}

==> 1 2 3 4

> 1~10까지 홀수만 출력

더보기

for(int i=1; i<=10; i++) {

   // 조건문

 if(i%2!=0) // i%2==0(짝수)

              // i%2!=(홀수) i%2==1(홀수) !(i%2==0) (홀수)

    System.out.print(i+" ");

 }

 

=>1 3 5 7 9

 

 

// 증가 => 2

System.out.print("\n=== 2씩증가 ===");

for(int i=1; i<=10; i+=2) {

     System.out.print(i+" ");

}

 

=>1 3 5 7 9

 

// continue 사용

System.out.print("\n=== continue ===");

for(int i=1; i<=10; i+=2) {

     if(i%2==0)

          continue; //짝수만 제외 i++로 이동

                       //증가식으로 이동

     System.out.print(i+" ");

}

 

=>1 3 5 7 9

 

1) updown 게임 -> 잘못된 입력 -> 성적 계산

   게임 -> 입력 관련 -> continue, 종료 -> break;

   숫자를 맞출때까지 게임을 계속 -> while

더보기

import java.util.*;

public class updown {

 public static void main(String[] args) {

   // 임의의 숫자를 저장 -> 난수(com)

   // 1~100사이의 임의 수를 추출

 int com = (int)(Math.random()*100)+1;

   // 0.0~0.99 -> 0.0~99.0 -> 0~99+1 -> 1~100

   // main => 재사용이 불가능하다

   // 프로그램은 프로그래머가 명령을 한 순서로 진행

   // 한줄씩 수행한다

   // 무한루프 => 횟수가 지정이 없는 경우

 Scanner scan = new Scanner(System.in);

 while(true) {

   // 사용자의 입력값을 받아 본다

   System.out.print("1~100까지의 사이의 정수 입력:");

   int user=scan.nextInt();

 

   if(user<1 || user>100) {

      System.out.println("잘못된 입력값입니다");

      // 처음부터 다시 수행, 정수 입력창으로 돌아감.

      continue;

   }

      count++;

   // 정상 수행

   // 비교

    if(user>com) {

       System.out.println("입력값보다 낮은 정수를 입력하세요");

     }

    else if(user<com) {

       System.out.println("입력값보다 높은 정수를 입력하세요");

     }

    else {

       System.out.println("Game Over!!");

       System.out.println("도전 횟수:"+count);

       break; // System.exit(0)

              // 반복문 종료

    }

  }

 }

}

3. 중첩 for문

 1) 형식

 for (초기값; 조건식; 증가식) {

  for (초기값; 조건식; 증가식) {

       반복 수행문장

  }

 }

 

 2) 실행순서

         1         2         4

 for (초기값; 조건식; 증가식) {

                    3

 ====================

          1         2        4

  for (초기값; 조건식; 증가식) {

               3

       반복 수행문장

  }

 ====================

 }

 

 3) 예 // 총 9번 반복

 for (int i=1; i<=3; i++) {  // 세로 출력 (줄 수) (행)

  for (int j=1; j<=3; j++) {  // 가로 출력 (열)

     System.out.println("i="+i+",j="+j);

  }

 }

i=1 -> j=1, j=2, j=3 -> i++

i=2 -> j=1, j=2. j=3 -> i++

i=3 -> j=1. j=2, j=3 -> i++ // i=4 종료

 

 ex) 구구단

줄 수: 2~9 -> 1차 for문 8개

갯수: 1~9 -> 2차 for문 9개

   2*1=2      ====     9*1=9

      . .                         . . 

   2*9=18     ====    9*9=81

더보기

for (int i = 1; i<=9; i++) {  //줄수 -> 행

   for (int j = 2; j<=9; j++) {  //구구단 출력 위치

       System.out.printf("%2d * %2d = %2d\t",j,i,j*i);

   }

   System.out.println();

}

 ex) 별찍기

1차 for문 4개 (행)

2차 for문 5개 (열)

   *****

   *****

   *****

   *****

더보기

for (int i = 1; i<=4; i++) {

   for (int j = 1; j<=5; j++) {

      System.out.print("*");

   }

     //다음줄에 출력

   System.out.println();

}

 4) 연습문제

  (1) 1 1 1 1 1

      2 2 2 2 2

      3 3 3 3 3

      4 4 4 4 4

      5 5 5 5 5

더보기

for (int i = 1; i<=5; i++) {

  // 출력

  for (int j = 1; j<=5; j++) {

    System.out.printf("%2d\t",i);

  }

  System.out.println();

}

 

  (2) A A A A A

      B B B B B 

      C C C C C

      D D D D D

      E E E E E

더보기

for (int i = 1; i<=5; i++) {

  for (int j = 1; j<=5; j++) {

    System.out.printf("%2c\t",i+64);

  }

  System.out.println();

}

 

또는

 

for (char i = 'A'; i<='E'; i++) {

  for (int j = 'A'; j<='E'; j++) {

    System.out.printf("%2c\t",i);

  }

  System.out.println();

}

 

 3) 1####

     #2###

     ##3##

     ###4#

     ####5

더보기

for(int i=1; i<=5; i++) {

 for(int j=1; j<=5; j++) {

    // 출력

   if(i==j)

     System.out.print(i);

   else

     System.out.print("#");

 }

 // 다음 출력

System.out.println();

}

 

 4) 25  24  23  22  21

    20  19  18  17  16

    15  14  13  12  11

    10   9    8    7    6

     5    4    3    2    1

더보기

int count = 25;

for(int i=1; i<=5; i++) {

 for(int j=1; j<=5; j++) {

     System.out.print("%2d\t",count);

    count--;

 }

System.out.println();

}

 

 5) A

    AB

    ABC

    ABCD

    ABCDE

더보기

char c = 'A';

for(int i=1; i<=5; i++) {

 c = 'A';

  for(int j=1; j<=i; j++) {

    System.out.prinf(c);

    c++;

  }

 System.out.println();

}

 

 6) ABCDE

   ABCD

   ABC

   AB

   A

 

수열 줄수(i) 알파벳(j)
 *      1      5      i+j=6 -> j=6-i
 *      2      4 
 *      3      3 
 *      4      2 
 *      5      1
 *      
 *      
 *      i=1 -> j=1, j=5 (6-i) -> 5 ABCDE
 *      i=2 -> j=1, j=4       -> 4 ABCD
 *      i=3 -> j=1, j=3       -> 3 ABC
 *      i=4 -> j=1, j=2       -> 2 AB
 *      i=5 -> j=1, j=1       -> 1 A

더보기

char c = 'A';

for(int i=1; i<=5; i++) {

 c = 'A';

  for(int j=1; j<=6-i; j++) {

    System.out.prinf(c);

    c++;

  }

 System.out.println();

}

 

7-1) *****

       ****

        ***

         **

          *

더보기

줄수(i) 공백(j) 별표(k)

  1        0         5

  2        1         4

  3        2         3

  4        3         2

  5        4         1

===============

i와 j의 관계 ->  j+1=i -> j=i-1

i와 k의 관계 -> k+i=6 -> k=6-i

 

for(int i=1; i<=5; i++) {

 for(int j=1; j<=i-1; j++) {

    System.out.print(" ");

 }

 for(int k=1; k<=6-i; k++) {

    System.out.print("*");

 }

System.out.println();

}

7-2) *****

      ****

      ***

      **

      *

더보기

for(int i=1; i<=5; i++) {

 for(int j=1; j<=6-i; j++) {

    System.out.print("*");

 }

 System.out.println();

}

 

8)    *

     **

    ***

   ****

  *****

더보기

줄수(i) 공백(j) 별표(k)

  1        4         1

  2        3         2

  3        2         3

  4        1         4

  5        0         5

===============

i와 j의 관계 ->  i+j=5 -> j=5-i

i와 k의 관계 -> k=i

 

for(int i=1; i<=5; i++) {

 for(int j=1; j<=5-i; j++) {

    System.out.print(" ");

 }

 for(int k=1; k<=i; k++) {

    System.out.print("*");

 }

}

 

 9) 1

    2 2

    3 3 3

    4 4 4 4

    5 5 5 5 5

더보기

1차 for -> 5 -> 1~5

2차 for -> 1-1, 2-2, 3-3, 4-4, 5-5

1 1 -> i=j -> j<=i

2 2

3 3

4 4

5 5

 

for (int i=1; i<=5; i++) {

  for (int j=1; j<=i; j++) {

     System.out.print(i);  // i행에 맞춰서 

  }

 System.out.println();

}

 

10) 1

     1 2

     1 2 3

     1 2 3 4

     1 2 3 4 5

 

더보기

for (int i=1; i<=5; i++) {

  for (int j=1; j<=i; j++) {

     System.out.print(j);  // j열에 맞춰서

  }

 System.out.println();

}

 

11) 1 1 1 1 1

     2 2 2 2

     3 3 3

     4 4

     5

더보기

줄수 ????

  1     5

  2     4

  3     3  

  4     2

  5     1

 

 

for (int i=1; i<=5; i++) {

  for (int j=1; j<=6-i; j++) {  // i+j=6

     System.out.print(i);  // i열에 맞춰서

  }

 System.out.println();

}

 

 12)        1

          1 2

        1 2 3 

     1 2 3 4

  1 2 3 4 5

//왼쪽에 공백이 있으면 변수 3개씀 i줄,j공" ",k수or별

더보기

for (int i=1; i<=5; i++) {

  for (int j=1; j<=5-i; j++) {

     System.out.print(" ");

  }

  for (int k=1; k<=i; k++) {

     System.out.print(k);

  }

 System.out.println();

}

 

 13) 입력값 별찍기

더보기

import java.util.*;

public class 별찍기 {

 public static void main(String[] args) {

    // 사용자 입력값

   int user = 0;

   Scanner scan = new Scanner(System.in);

   System.out.print("정수 입력>");

    // user에 저장

   user = scan.nextInt(); // 줄수

   for (int i = 1; i<=user; i++) {

     for (int j = 1; j<=i; j++) {

        System.out.print("*");

     }

    System.out.println();

   }

 

=>

*

**

***

****

*****

 

   for (int i = 1; i<=user; i++) {

     for (int j = 1; j<=user+1-i; j++) {

      // for (int j = 0; j<=user-i; j++)

         System.out.print("*");

     }

    System.out.println();

   }

 

=>

*****

****

***

**

*

 

 }

}

 

 14) [1,1] [1,2] [1,3] [1,4]

      [2,1] [2,2] [2,3] [2,4]

      [3,1] [3,2] [3,3] [3,4]

      [4,1] [4,2] [4,3] [4,4]

      [5,1] [5,2] [5,3] [5,4]

더보기

for (int i=1; i<=5; i++) {

 for (int j=1; j<=4; j++) {

    System.out.printf("[%d,%d]",i,j);

 }

System.out.println();

}

 

4. forEach : 향상된 for문 -> 출력용 -> web, mobile ==> front-end

====== 1) 배열, 2) 컬렉션 -> 데이터가 묶여 있는 상태

for(데이터형 변수: 배열, 컬렉션)

 

int[] arr= {1,2,3,4,5};  // -> arr[0] -> 1

for(int i=0; i<5; i++) {

 System.out.print(arr[i]+" ");

}

=> 1 2 3 4 5

 

// 출력을 할때 => jdk 1.5이상에서만 사용 가능

 

int[] arr= {1,2,3,4,5};

for(int i:arr) {

 System.out.print(i+" ");

}

=> 1 2 3 4 5

반응형
Comments