나를 기록하다
article thumbnail
반응형

1. 2. 반복문 - for, while, do-while


1.1. 2.1 for

<code />
for (초기화; 조건식; 증감식) { // 조건식이 참일 때 수행될 문장 }

 

1.1.1. 2.1.1 별 찍기 - 왼쪽 정렬

<code />
public class _09_Star { public static void main(String[] args) { for(int i=1; i<=5; i++) { for (int j=0; j<i; j++) { System.out.print("*"); } System.out.println(); } } }
<code />
// 결과 * ** *** **** *****

 

1.1.2. 2.1.2 별 찍기 - 오른쪽 정렬

<code />
public class _10_RightStar { public static void main(String[] args) { for(int i=1;i<6;i++) { for(int j=0;j<5-i;j++) { System.out.print(" "); } for(int k=0;k<i;k++) { System.out.print("*"); } System.out.println(); } } } // i : 줄, j : 공백, k : 별
<code />
// 결과 * ** *** **** *****

 

1.1.3. 2.1.3 별 찍기 - 중앙 정렬

<code />
public class _11_MidStar { public static void main(String[] args) { int m = 10; for(int i=1;i<=m;i++) { for (int j=0;j<m-i;j++) { System.out.print(" "); } for (int k=0;k<2*i-1;k++) { System.out.print("*"); } System.out.println(); } } } // i 줄, j 공백, k 별 //00000*00000 //0000***0000 //000*****000 //00*******00 //0*********0
<code />
* *** ***** ******* ********* *********** ************* *************** ***************** *******************

 

1.1.4. 2.1.4 하트 찍기

<code />
public class _12_Heart { public static void main(String[] args) { for(int m=0;m<2;m++) { for(int i=0;i<6;i++) { System.out.print(" "); } for(int j=0;j<3;j++) { System.out.print("*"); } } System.out.println(); for(int a=0; a<3; a++) { for(int b=0;b<5-a;b++) { System.out.print(" "); } System.out.print("*"); for(int c=0;c<2*a+3;c++) { System.out.print(" "); } System.out.print("*"); for(int d=0;d<4-2*a;d++) { System.out.print(" "); } System.out.print("*"); for(int c=0;c<2*a+3;c++) { System.out.print(" "); } System.out.print("*"); System.out.println(); } for(int a=0; a<9; a++) { for(int b=0;b<a+3;b++) { System.out.print(" "); } System.out.print("*"); for(int c=0;c<16-a*2;c++) { System.out.print(" "); } System.out.println("*"); } } }
<code />
// 결과 *** *** * * * * * * * * * ** * * * * * * * * * * * * * * * * * **

 

1.1.5. 2.1.5 구구단 만들기

<code />
public class _13_9x9 { public static void main(String[] args) { for (int i=1;i<=9;i++) { for (int j=1;j<=9;j++) { System.out.printf("%d x %d = %d", i, j, i*j); System.out.println(); } } } }
<code />
// 결과 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 . . . 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81

 

1.1.6. 2.1.6 foreach

<code />
for( 타입 변수명 : 배열 또는 컬렉션) { // 반복할 문장 }
<code />
public class _14_ForEach { public static void main(String[] args) { int[] arr = {10, 20, 30, 40, 50}; int sum = 0; for (int tmp : arr) { System.out.printf("%d ", tmp); sum += tmp; } System.out.println(); System.out.println("sum = " + sum); } }
<code />
// 결과 10 20 30 40 50 sum = 150

1.2. 2.2 while

<code />
while (조건식) { // 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다. }
  • for문과 while문 비교
<code />
for(int i = 1; i <= 10; i++) { System.out.println(i); }
<code />
int i = 1; while(i <= 10) { System.out.println(i); i++; }

→ for문은 초기화, 조건식, 증감식을 한 곳에 모아 놓은 것, while문과 다르지 않다.

→ 따라서 for문과 while문은 항상 서로 변환이 가능

<code />
만일 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합하고 그렇지 않을 경우엔 for문이 더 적합

 

  • [예제] while 문 연산(후위형) i--
<code />
public class _15_WhileEx1 { public static void main(String[] args) { int i = 5; while (i--!=0) { System.out.println(i + " - I can do it."); } } }
<code />
// 결과 4 - I can do it. 3 - I can do it. 2 - I can do it. 1 - I can do it. 0 - I can do it.

 

  • [예제] while 문 연산(전위형) --i
<code />
public class _16_WhileEx2 { public static void main(String[] args) { int i = 5; while (--i!=0) { System.out.println(i + " - I can do it."); } } }
<code />
// 결과 4 - I can do it. 3 - I can do it. 2 - I can do it. 1 - I can do it.

 

  • [예제] 사용자로부터 숫자를 입력받고, 이 숫자의 각 자리의 합을 구하는 예제
<java />
import java.util.Scanner; public class _17_SumOfNumber { public static void main(String[] args) { int num = 0, sum = 0; System.out.print("숫자를 입력하세요 ex. 12345 >> "); Scanner scanner = new Scanner(System.in); String tmp = scanner.nextLine(); num = Integer.parseInt(tmp); while (num != 0) { // num을 10으로 나눈 나머지를 sum에 더함 sum += num % 10; // sum = sum + num % 10; System.out.printf("sum = %3d num = %d\n", sum, num); num /= 10; // num = num / 10; num을 10으로 나눈 값을 다시 num에 저장 } System.out.println("입력하신 숫자의 각 자리수 합계는 " + sum + "입니다."); } }
<java />
// 결과 숫자를 입력하세요 ex. 12345 >> 51313 sum = 3 num = 51313 sum = 4 num = 5131 sum = 7 num = 513 sum = 8 num = 51 sum = 13 num = 5 입력하신 숫자의 각 자리수 합계는 13입니다.

 

  • [예제] 1부터 입력받은 숫자까지의 합계
<java />
import java.util.Scanner; public class _19_SumOfRange { public static void main(String[] args) { int num = 0, sum = 0; System.out.print("숫자를 선택하세요 >> "); Scanner scanner = new Scanner(System.in); String tmp = scanner.nextLine(); num = Integer.parseInt(tmp); for (int i = 0 ; i <= num ; i++) { sum += i; } System.out.println("0부터 " + num + "까지의 합계는 " + sum + "입니다."); } }
<java />
// 결과 숫자를 선택하세요 >> 100 0부터 100까지의 합계는 5050입니다.

 

  • [예제] i를 1씩 증가시켜서 합계 구하기(누적합계 100 넘지 않음)
<code />
public class _20_SumOfRange2 { public static void main(String[] args) { int sum = 0, i = 0; // i를 1씩 증가시켜서 sum에 더한다. while ((sum += ++i) < 100) { System.out.printf("%d - %d%n", i, sum); } } }
<code />
1 - 1 2 - 3 3 - 6 4 - 10 5 - 15 6 - 21 7 - 28 8 - 36 9 - 45 10 - 55 11 - 66 12 - 78 13 - 91

 

  • [예제] 사용자로부터 반복해서 숫자 입력 받고 0을 입력 시 총합을 출력하는 예시
<code />
import java.util.Scanner; public class _21_SumEx { public static void main(String[] args) { int num; int sum = 0; boolean flag = true; Scanner scanner = new Scanner(System.in); System.out.println("합계를 구할 숫자를 입력하시오. (끝내려면 0을 입력)"); while(flag) { System.out.print(">>"); String tmp = scanner.nextLine(); num = Integer.parseInt(tmp); if (num!=0) { sum += num; } else { flag = false; } } System.out.println("합계 : " + sum); } }
<code />
합계를 구할 숫자를 입력하시오. (끝내려면 0을 입력) >>1 >>2 >>3 >>4 >>5 >>0 합계 : 15

1.3. 2.3 do-while

<code />
do { // 조건식의 연산결과가 참일 때 수행될 문장들을 적는다. } while (조건식); // <- 끝에 ';'을 잊지 않도록 주의

→ 많이 쓰이진 않지만 반복적으로 사용자의 입력을 받아서 처리할 때 유용하다.

 

  • [예제] Math.random()을 이용해서 1과 100사이의 임의의 수를 변수 answer에 저장하고 이 값을 맞추기
<code />
import java.util.Scanner; public class _22_DoWhileEx { public static void main(String[] args) { int input = 0, answer = 0; answer = (int)(Math.random() * 100) + 1; // 1 ~ 100 사이의 임의의 수 Scanner scanner = new Scanner(System.in); do { System.out.print("1 과 100 사이의 임의의 정수를 입력하세요 >> "); input = scanner.nextInt(); if (input > answer) { System.out.println("down"); } else if (input < answer) { System.out.println("up"); } } while (input != answer); System.out.print("짝짝짝! 정답입니다!"); } }
<code />
// 결과 1100 사이의 임의의 정수를 입력하세요 >> 50 up 1100 사이의 임의의 정수를 입력하세요 >> 75 up 1100 사이의 임의의 정수를 입력하세요 >> 88 down 1100 사이의 임의의 정수를 입력하세요 >> 82 up 1100 사이의 임의의 정수를 입력하세요 >> 85 up 1100 사이의 임의의 정수를 입력하세요 >> 87 down 1100 사이의 임의의 정수를 입력하세요 >> 86 짝짝짝! 정답입니다!

 

  • [예제] 369 게임 만들기
<code />
import java.util.Scanner; public class _23_369Game { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("1부터 10000 사이의 정수를 입력하세요."); String num = sc.next(); int length = num.length(); int temp = 0; String answer = ""; int number = Integer.parseInt(num); while (length > 0) { if (length == 1) { temp = number % 10; if (temp == 3 || temp == 6 || temp == 9) { answer += "짝"; } length--; } else { temp = (int) (number / (Math.pow(10, length - 1))); // number를 10^length 만큼으로 나눈 것 if (temp == 3 || temp == 6 || temp == 9) { answer += "짝"; } number = (int) (number - (temp * (Math.pow(10, length - 1)))); length--; } } System.out.println(answer); } }
<code />
1부터 10000 사이의 정수를 입력하세요. 3 1부터 10000 사이의 정수를 입력하세요. 44 1부터 10000 사이의 정수를 입력하세요. 36 짝짝 1부터 10000 사이의 정수를 입력하세요. 336 짝짝짝 1부터 10000 사이의 정수를 입력하세요. 6993 짝짝짝짝

1.4. 2.4 break

  • break 문은 자신이 포함된 가장 가까운 반복문을 벗어난다. 주로 if 문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다.
<code />
public class _25_Break { public static void main(String[] args) { int sum = 0; int i = 0; while (true) { if (sum > 5049) break; ++i; sum += i; } System.out.println("i=" + i); System.out.println("sum=" + sum); } }
<code />
// 결과 i=100 sum=5050

1.5. 2.5 continue

  • continue 문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue 문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. for 문의 경우 증감식으로 이동하며, while 문과 do-while 문의 경우 조건식으로 이동한다.
  • continue 문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break 문과 다르다. 주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue 문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행한다.
<code />
public class _26_Continue { public static void main(String[] args) { for (int i = 0; i <= 10; i++) { if (i % 3 == 0) continue; System.out.println(i); } } }
<code />
// 결과 1 2 4 5 7 8 10

 

  • [예제] 메뉴를 보여주고 선택
<code />
import java.util.Scanner; public class _27_SelectMenu { public static void main(String[] args) { int menu = 0; int num = 0; Scanner sc = new Scanner(System.in); while (true) { System.out.println("(1) square"); System.out.println("(2) square root"); System.out.println("(3) log"); System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료:0) >> "); String tmp = sc.nextLine(); menu = Integer.parseInt(tmp); if (menu == 0) { System.out.println("프로그램을 종료합니다."); break; } else if (menu > 3 || menu < 1) { System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)"); continue; } System.out.println("선택하신 메뉴는 " + menu + "번입니다."); } } }
<code />
(1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >> 1 선택하신 메뉴는 1번입니다. (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >> 2 선택하신 메뉴는 2번입니다. (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >> 3 선택하신 메뉴는 3번입니다. (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >> 4 메뉴를 잘못 선택하셨습니다. (종료는 0) (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >> 0 프로그램을 종료합니다.

1.6. 2.6 이름 붙은 반복문

  • break 문
    → 근접한 단 하나의 반복문만 벗어날 수 있음
    → 여러 개의 반복문이 중첩된 경우에는 break 문으로 중첩 반복문을 완전히 벗어날 수 없음
    → 중첩 반복문 앞에 이름을 붙이고 break 문과 continue 문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 건너뛸 수 있음
<code />
public class _28_NamedLoop { public static void main(String[] args) { Loop1 : for (int i = 2; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (j == 5) break Loop1; System.out.println( i + "*" + j + "=" + i * j); } System.out.println(); } } }
<code />
// break Loop1; 결과 2*1=2 2*2=4 2*3=6 2*4=8

<code />
public class _28_NamedLoop { public static void main(String[] args) { Loop1 : for (int i = 2; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (j == 5) break; System.out.println( i + "*" + j + "=" + i * j); } System.out.println(); } } }
<code />
// break; 결과 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 ﹕ 8*3=24 8*4=32 9*1=9 9*2=18 9*3=27 9*4=36

<code />
public class _28_NamedLoop { public static void main(String[] args) { Loop1 : for (int i = 2; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (j == 5) continue Loop1; System.out.println( i + "*" + j + "=" + i * j); } System.out.println(); } } }
<code />
// continue Loop1; 결과(break와 달리 줄바꿈이 없음) 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 ﹕ 8*3=24 8*4=32 9*1=9 9*2=18 9*3=27 9*4=36

<code />
public class _28_NamedLoop { public static void main(String[] args) { Loop1 : for (int i = 2; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (j == 5) continue; System.out.println( i + "*" + j + "=" + i * j); } System.out.println(); } } }
<code />
// continue; 결과 2*1=2 2*2=4 2*3=6 2*4=8 2*6=12 2*7=14 2*8=16 2*9=18 ﹕ 9*4=36 9*6=54 9*7=63 9*8=72 9*9=81

 

  • [예제] 메뉴를 고르고 값을 계산하는 계산기 만들기
<code />
//내가 작성한 오답 import java.util.Scanner; public class _Calculator { // 틀렸지만 열심히 만들어서 남겨둠 public static void main(String[] args) { Scanner sc1 = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); int menu = 0; int number = 0; Loop1 : while (true) { System.out.println("(1) square"); System.out.println("(2) square root"); System.out.println("(3) log"); System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료:0) >>"); String tmp1 = sc1.nextLine(); System.out.print("계산할 값을 입력하세요. (계산 종료:0. 전체 종료:99) >> "); String tmp2 = sc2.nextLine(); menu = Integer.parseInt(tmp1); while (!(menu>=1 && menu<=3)) { if (menu == 0) break; } while (!(number > 0 && number < 99 )) { if (number == 0) break; if (number == 99) break Loop1; } switch (number) { case 1: System.out.printf("result=%d", number*number); case 2: System.out.printf("result=%d", Math.sqrt(number)); case 3: System.out.printf("result=%d", Math.log(number)); } System.out.println(); } } }
<code />
// 정답 코드 import java.util.Scanner; public class _29_Calculator_Answer { public static void main(String[] args) { int menu = 0, num = 0; Scanner sc = new Scanner(System.in); outer: while(true) { System.out.println("(1) square"); System.out.println("(2) square root"); System.out.println("(3) log"); System.out.print("원하는 메뉴(1~3)를 선택하세요. (종료:0) >>"); String tmp = sc.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장 menu = Integer.parseInt(tmp); // 입력받은 문자열(tmp)을 숫자로 변환 if (menu==0) { System.out.println("프로그램을 종료합니다."); break; } else if (!(1<=menu && menu <=3)) { System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)"); continue; } for(;;) { System.out.print("계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>"); tmp = sc.nextLine(); num = Integer.parseInt(tmp); if (num==0) break; if (num==99) break outer; switch (menu) { case 1: System.out.println("result=" + num*num); break; case 2: System.out.println("result=" + Math.sqrt(num)); break; case 3: System.out.println("result=" + Math.log(num)); break; } } // for(;;) } // while의 끝 } // main의 끝 }
<code />
// 결과 1 (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >>1 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>24 result=576 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>0 (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >>2 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>625 result=25.0 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>0 (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >>3 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>2718 result=7.907651594711089 계산할 값을 입력하세요. (계산 종료:0, 전체 종료:99) >>99
<code />
// 결과 2 (1) square (2) square root (3) log 원하는 메뉴(1~3)를 선택하세요. (종료:0) >>0 프로그램을 종료합니다.
반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!