-
012. 실행 흐름의 컨트롤(제어문) for문 중첩(별 찍기), break, continue, skip,return 실습, 변수와 메소드의 스코프SsY/Class 2023. 2. 26. 22:55728x90
2023.02.09 (목)
실행 흐름의 컨트롤 (제어문)
- 반복문(for문) 중첩 실습 (별찍기)- Test061~064 (과제)
- 반복문(for문) 중첩 실습 (별찍기)
- Test061
더보기public class Test061 { public static void main(String[] args) { for (int j=4; j>=0; j--) { for (int i=0; i<5; i++) { if (i>=j) System.out.print("*"); else System.out.print(" "); } System.out.println(); } } }
- Test062
더보기public class Test062 { public static void main(String[] args) { for (int i=0; i<5; i++) { for (int j=0; j<5+i; j++) { if (j<=3-i) System.out.print(" "); else System.out.print("*"); } System.out.println(); } } }
- Test063
더보기public class Test063 { public static void main(String[] args) { for (int i=0; i<5; i++) { for (int j=0; j<9-i; j++) { if (i>j) System.out.print(" "); else System.out.print("*"); } System.out.println(); } } }
- Test064
더보기public class Test064 { public static void main(String[] args) { for (int i=0; i<5; i++) { for (int j=0; j<5+i; j++) { if (j<=3-i) System.out.print(" "); else System.out.print("*"); } System.out.println(); } for (int i=0; i<4; i++) { for (int j=0; j<8-i; j++) { if (i>=j) System.out.print(" "); else System.out.print("*"); } System.out.println(); } } }
실행의 흐름 컨트롤(제어문)
- break; 실습// ※ break 키워드가 지니는 의미
// 멈춘다. (+ 그리고 빠져나간다.)- Test065
- break 실습
더보기/*==================================================== ■■■ 실행 흐름의 컨트롤 (제어문) ■■■ - break 실습 =====================================================*/ // 다음과 같은 처리가 이루어지는 프로그램을 구현한다. // 단, 입력받는 정수는 1~100 범위 안에서만 // 가능하도록 한다. // 실행 예) // 임의의 정수 입력 : -10 // 임의의 정수 입력 : 2023 // 임의의 정수 입력 : 10 // >> 1 ~ 10 까지의 합 : 55 // 계속하시겠습니까 (Y/N)? : y // 임의의 정수 입력 : 100 // >> 1 ~ 100 까지의 합 : 5050 // 계속하시겠습니까 (Y/N)? : Y // 임의의 정수 입력 : 3 // >> 1 ~ 3 까지의 합 : 6 // 계속하시겠습니까 (Y/N)? : n 또는 N // 계속하려면 아무 키나 누르세요... → 프로그램 종료 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Test065 { public static void main(String[] args) throws IOException { int n,a,sum; char ans; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { do { System.out.print("\n임의의 정수 입력 : "); n = Integer.parseInt(br.readLine()); } while (n<1 || n>100); sum=0; for (a=1; a<=n; a++) { sum+=a; } System.out.printf(">> 1 ~ %d 까지의 합 : %d\n", n, sum); System.out.print("계속하시겠습니까 (Y/N)?"); ans = (char)System.in.read(); if (ans != 'Y' && ans != 'y') { break; } System.in.skip(2); } }// end main() }// end class
※ System.in.skip()
- System.in.read()로 문자 값을 읽어 올 때,
입력한 값은 실제로 : 입력한 문자 + 엔터(\r \n) 값이기 때문에
엔터 값이 그대로 남아있게 되어 java.lang.NumberFormatException (런타임에러) 발생하게 됨
- 엔터 값은 \r + \n 값으로 문자 2개의 입력 값을 차지하기 때문에
→ System.in.skip(2); // 2개의 문자 값을 skip 해야 다음 값을 제대로 읽어 올 수 있다.
실행 흐름의 컨트롤 (제어문)
- continue; 실습// ※ continue 키워드가 지니는 의미
// (뒷부분 무시하고 + ) 계속해라.- Test066
- continue 실습
더보기/*==================================================== ■■■ 실행 흐름의 컨트롤 (제어문) ■■■ - continue 실습 =====================================================*/ // continue 를 활용하여 다음과 같이 출력될 수 있도록 // 프로그램을 구현한다. // 실행 예) /* 1 : 1 3 : 4 5 : 9 7 : 16 : 99 : 2500 계속하려면 아무 키나 누르세요... */ public class Test066 { public static void main(String[] args) { int n=0, s=0; while (n<100) { n++; if (n%2==0) // n이 짝수라면... continue; // 뒷부분 무시하고 계속해라 s += n; //-- 뒷부분 System.out.println(n + " : " + s); //-- 뒷부분 } } } // 실행결과 /* 1 : 1 3 : 4 5 : 9 7 : 16 9 : 25 11 : 36 13 : 49 15 : 64 17 : 81 19 : 100 21 : 121 23 : 144 25 : 169 27 : 196 29 : 225 31 : 256 33 : 289 35 : 324 37 : 361 39 : 400 41 : 441 43 : 484 45 : 529 47 : 576 49 : 625 51 : 676 53 : 729 55 : 784 57 : 841 59 : 900 61 : 961 63 : 1024 65 : 1089 67 : 1156 69 : 1225 71 : 1296 73 : 1369 75 : 1444 77 : 1521 79 : 1600 81 : 1681 83 : 1764 85 : 1849 87 : 1936 89 : 2025 91 : 2116 93 : 2209 95 : 2304 97 : 2401 99 : 2500 계속하려면 아무 키나 누르십시오 . . . */
실행 흐름의 컨트롤 (제어문)
- return; 실습// ※ return 키워드가 지니는 두 가지 의미
// 1. 값의 반환
// 2. (return 문을 포함하는) 메소드 종료
- 단, main()메소드의 경우 값을 반환하지 않는 형태로, 메소드 종료의 의미를 가진다.
- main()메소드의 종료는 프로그램 종료를 의미- Test067
-return; 실습
더보기/*==================================================== ■■■ 실행 흐름의 컨트롤 (제어문) ■■■ - return 실습 =====================================================*/ import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Test067 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n, s; System.out.print("임의의 정수 입력(10 이상) : "); n = Integer.parseInt(br.readLine()); if (n<10) { System.out.println("10 이상의 정수를 입력해야합니다"); return; //-- 메소드 종료 → return 문을 포함하고 있는 메소드 // → 지금은 main() 메소드 → 프로그램 종료 } s = 0; for (int i=1; i<=n; i++) { s += i; } System.out.println("결과 : " + s ); } } // 실행 결과 /* 임의의 정수 입력(10 이상) : 2 10 이상의 정수를 입력해야합니다 계속하려면 아무 키나 누르십시오 . . . */ /* 임의의 정수 입력(10 이상) : 10 결과 : 55 계속하려면 아무 키나 누르십시오 . . . */
메소드와 변수의 스코프
- 메소드의 값의 반환
- 변수의 스코프
- 메소드의 재귀호출 (fear. 팩토리얼)클래스 : 설계한다, 정의한다, 규정한다
변수 : 선언한다 → 접근한다, 참조한다...
메소드 : 정의한다 → 호출(사용)한다
※ 값을 반환하지 않는 메소드 : void
public static void main(String[] args)
※ 값을 반환하는 메소드 : 메소드를 호출한 위치로 값을 반환
public static int sum() --- // 리턴 자료형 == 반환 자료형
- 상기 sum이라는 이름의 메소드는 int형의 값을 반환하는 메소드
※ scope의 유효범위(가시성)
- 변수는 선언된 지역 { } 을 벗어나면 자동 소멸된다.
- 즉 선언된 클래스 혹은 메소드 안에서만 사용되며, 식별자로서의 역할도 해당 범위 내에서만 이루어진다.
※ 메소드의 재귀호출
- 자바는 재귀적 메소드 호출을 허용한다.
- 코드의 복사본이 실행된다고 이해하는 것이 재귀의 이해해 도움이 된다!ex) 팩토리얼
728x90'SsY > Class' 카테고리의 다른 글
014. 클래스와 인스턴스 실습, 생성자(Constructor) (0) 2023.03.02 013. 클래스와 인스턴스( 지역변수, 전역변수, 메소드와 참조변수, 매개변수, default pakage) (1) 2023.02.28 011. 실행 흐름의 컨트롤(반복문) while, do~while, for문 실습 (0) 2023.02.24 010. 실행 흐름의 컨트롤(반복문) while, do~while, for + while문 실습 (1) 2023.02.23 009. if, if~else문 실습 , Switch 문 + 실습 (3) 2023.02.20 - Test061~064 (과제)