JAVA
-
Test069 메소드의 재귀호출2020.09.04
-
Test068 실행 흐름의 컨트롤(제어문) return2020.09.04
-
Test067 실행 흐름의 컨트롤(제어문) continue2020.09.04
-
Test066 실행 흐름의 컨트롤(제어문) break2020.09.04
-
Test061~065 반복문의 중첩(4) 별찍기2020.09.04
-
Test060 반복문의 중첩(3)2020.09.04
Test069 메소드의 재귀호출
재귀 함수
하나의 메소드에서 자신을 다시 호출하여 작업을 수행하는 방식으로 주어진 문제를 푸는 방법이다. 재귀 호출이나 되부름 이라고 불리기도 한다.
- 메소드 정의 내에 같은 이름의 함수가 올때 이를 재귀함수라 부른다.
- 반드시 탈출조건이 있어야 stack overflow를 방지할 수 있다.
- 같은 행위가 반복될 때 재귀메소드를 사용한다,
가장 간단한 예를 들자면 팩토리얼을 구하는 프로그램을 재귀호출을 이용해서 구현할 수 있다.
public class Factorial
{
public static void main(String[] args)
{
int input = 4;
System.out.println(fact(input));
}
public static int fact(int n)
{
if(n<=1)
return n;
else
return fact(n-1) * n
}
}
// 실행 결과
/*
24
*/

이 개념을 이용하여 정해진 횟수만큼 Hi!를 출력하는 프로그램을 구현하면 아래와 같다.
public class Test069
{
public static void main(String[] args)
{
showHi(5);
}
public static void showHi(int cnt)
{
System.out.println("Hi!");
if(cnt==1)
return;
showHi(--cnt);
}
}
실행 결과
// 실행 결과 /* Hi! Hi! Hi! Hi! Hi! */
'JAVA > 클래스와 객체' 카테고리의 다른 글
| Test075 클래스와 인스턴스(4) (0) | 2020.09.05 |
|---|---|
| Test074 클래스와 인스턴스(3) (0) | 2020.09.05 |
| Test073 클래스와 인스턴스(2) (0) | 2020.09.05 |
| Test072 클래스와 인스턴스(1) (2) | 2020.09.05 |
| Test070~071 전역변수와 지역변수 (0) | 2020.09.04 |
Test068 실행 흐름의 컨트롤(제어문) return
return문
return이란 명령어는 쉽게 생각해서 두가지로 사용되는걸로 생각할 수 있다.
1. 클래스내의 어떠한 메소드가 실행되고 해당 메소드 실행에 따라 나온 값을 호출한 곳에서 돌려받고자 할때
(값의 반환)
2. 해당 메소드 실행중 특정 조건에 따라 해당 메소드의 진행을 멈추고 빠져나올때
(메소드의 종료)
제어문에서의 return문은 메소드의 종료를 뜻한다.
예시에서 return문의 사용을 살펴보자면 아래와 같다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Test068
{
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;
//-- 메소드 종료 → main() 메소드 종료 → 프로그램 종료
}
s = 0;
for(int i=1; i<=n; i++)
s+=i;
System.out.println("결과 : " + s);
}
}
실행 결과
// 실행 결과 /* 임의의 정수 입력(10 이상) : 10 결과 : 55 계속하려면 아무 키나 누르십시오 . . . 임의의 정수 입력(10 이상) : 2 10 이상의 정수를 입력해야 합니다. 계속하려면 아무 키나 누르십시오 . . . */
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test081 배열의 개요 (0) | 2020.09.05 |
|---|---|
| 표기법 정리 (1) | 2020.09.05 |
| Test067 실행 흐름의 컨트롤(제어문) continue (0) | 2020.09.04 |
| Test066 실행 흐름의 컨트롤(제어문) break (0) | 2020.09.04 |
| Test061~065 반복문의 중첩(4) 별찍기 (0) | 2020.09.04 |
Test067 실행 흐름의 컨트롤(제어문) continue
continue문
break문과 같이 제어문의 일종이다. 자신이 포함된 반복문의 끝으로 이동한다(다음 반복으로 넘어간다.)
즉, continue문 이후의 문장들을 무시하고 다음 루프를 수행한다.
※ continue 구문을 활용하여 다음과 같이 출력될 수 있도록 프로그램을 구현한다.
실행 예)
1 : 1
3 : 4
5 : 9
:
99 : 2500
계속하려면 아무 키나 누르세요...
public class Test067
{
public static void main(String[] args)
{
int n=0, s=0;
while(n<100)
{
n++;
if(n % 2 == 0) //-- 짝수라면...
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 계속하려면 아무 키나 누르십시오 . . . */
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| 표기법 정리 (1) | 2020.09.05 |
|---|---|
| Test068 실행 흐름의 컨트롤(제어문) return (0) | 2020.09.04 |
| Test066 실행 흐름의 컨트롤(제어문) break (0) | 2020.09.04 |
| Test061~065 반복문의 중첩(4) 별찍기 (0) | 2020.09.04 |
| Test060 반복문의 중첩(3) (0) | 2020.09.04 |
Test066 실행 흐름의 컨트롤(제어문) break
break 문
break는 반복문이나 조건문, 즉 제어문들에게서 벗어날때 사용한다.
각 제어문들에 대한 예는 아래와 같다.
break 문은 중첩된 반복문 안에서도 사용할 수 있다.
하지만 그럴 경우에 가장 안쪽에 있는 반복문만 빠져나가게 된다.
if문
if( 참이냐 )
{
if( 참이냐 )
{
명령문;
break;
}
else
명령문2;
}
▷ else 를 사용하지 않아도 명령문2을 수행하지 않습니다.
for문
for(int i=0; i<100; ++i)
{
if( i == 50 )
break;
명령문;
}
▷ i가 50이 되면 강제로 for문을 빠져나옵니다.
while문
int i =0;
while( 참 )
{
++i;
if( i == 50 )
break;
}
▷ i가 50이 되면 강제로 while문을 빠져나옵니다.
switch문
switch(정수식)
{
case 상수1: 명령문1: break;
case 상수2: 명령문2: break;
}
▷ 알맞은 상수에 맞추어 명령문을 실행후 switch문을 빠져 나옵니다.
※ 다음과 같은 처리가 이루어지는 프로그램을 구현한다. 단, 입력받는 정수는 1~100 범위 안에서만 가능하도록 처리한다.
실행 예)
임의의 정수 입력 : -10
임의의 정수 입력 : 0
임의의 정수 입력 : 2020
임의의 정수 입력 : 10
>> 1 ~ 10 까지의 합 : 55
계속하시겠습니끼(Y/N)? : y
임의의 정수 입력 : 100
>> 1 ~ 100 까지의 합 : 5050
계속하시겠습니끼(Y/N)? : N
계속하시려면 아무 키나 누르세요.... → 프로그램 종료
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Test066
{
public static void main(String[] args) throws IOException
{
// BufferedReader 인스턴스 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n, s, i;
//-- n : 외부로부터 사용자의 입력값을 담아둘 변수
// s : 누적합 연산 결과를 담아둘 변수
// i : 1부터 1씩 사용자의 입력값까지 증가할 변수
char ch;
//-- 프로세스를 계속 진행할지의 여부를 담아둘 변수
// (Y / y / N / n)
while(true)
{
do
{
System.out.print("\n임의의 정수 입력 : ");
n = Integer.parseInt(br.readLine());
}
while (n<1 || n>100);
s = 0; //-- 누적합을 담아낼 변수 초기화 → 위치 check~!!!
for(i=1; i<=n; i++)
s += i;
System.out.printf(">> 1 ~ %d 까지의 합 : %d\n", n, s);
System.out.print("계속하시겠습니끼(Y/N)?");
ch = (char)System.in.read();
// y + enter(\r\n)
// 그만할래~!!! 의사표현
//ch == 'N' || ch == 'n'
if(ch != 'Y' && ch != 'y') // 논리 연산자 check~!!!
{
// 반복문(while)을 빠져나갈 수 있는 코드 작성 필요
//-- 위와 같은 의사표현을 했다면
// 그동안 수행했던 반복문을 멈추고 빠져나가야 한다.
break;
//-- 멈춘다. ( + 그리고 빠져나간다.) check~!!!
}
// 엔터값(\r\n) 처리
System.in.skip(2);
}//while_end
}//main()_end
}//class_end
실행 결과
// 실행 결과
/*
임의의 정수 입력 : 151
임의의 정수 입력 : 121
임의의 정수 입력 : 50
>> 1 ~ 50 까지의 합 : 1275
계속하시겠습니끼(Y/N)?Y
임의의 정수 입력 : 11
>> 1 ~ 11 까지의 합 : 66
계속하시겠습니끼(Y/N)?
*/
'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test068 실행 흐름의 컨트롤(제어문) return (0) | 2020.09.04 |
|---|---|
| Test067 실행 흐름의 컨트롤(제어문) continue (0) | 2020.09.04 |
| Test061~065 반복문의 중첩(4) 별찍기 (0) | 2020.09.04 |
| Test060 반복문의 중첩(3) (0) | 2020.09.04 |
| Test059 반복문의 중첩(2) (0) | 2020.09.04 |
Test061~065 반복문의 중첩(4) 별찍기
※ 다음과 같은 내용이 출력될 수 있도록 반복문의 중첩 구문을 작성하여 프로그램을 구현한다.
①
실행 예)
*
**
***
****
*****
public class Test061
{
public static void main(String[] args)
{
int i,j,k;
for(i = 1; i <= 5; i++)
{
for(j = i; j < 5; j++)
{
System.out.printf(" ");
}
for(k = i; k > 0; k--)
{
System.out.printf("*");
}
System.out.println();
}
}
}
// 실행 결과
/*
*
**
***
****
*****
계속하려면 아무 키나 누르십시오 . . .
*/
②
실행 예)
* //공백 4 //*1
*** //공백 3 //*3
***** //공백 2 //*5
******* //공백 1 //*7
********* //공백 0 //*9
public class Test062
{
public static void main(String[] args)
{
int i,j,k;
for(i = 1; i <= 5; i++)
{
for(j = 5 - i; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = 2*i-1; k > 0 ; k--)
{
System.out.printf("*");
}
System.out.println();
}
}
}
// 실행 결과
/*
*
***
*****
*******
*********
계속하려면 아무 키나 누르십시오 . . .
*/
③
실행 예)
********* //공백 0 //*9
******* //공백 1 //*7
***** //공백 2 //*5
*** //공백 3 //*3
* //공백 4 //*1
public class Test063
{
public static void main(String[] args)
{
int i,j,k;
for(i = 1; i <= 5; i++)
{
for(j = i-1; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = (2*i)-1; k < 10; k++)
{
System.out.printf("*");
}
System.out.printf("\n");
}
}
}
// 실행 결과
/*
*********
*******
*****
***
*
계속하려면 아무 키나 누르십시오 . . .
*/
④
실행 예)
*********
*******
*****
***
*
*
***
*****
*******
*********
public class Test064
{
public static void main(String[] args)
{
int i,j,k;
for(i = 1; i <= 5; i++)
{
for(j = i - 1; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = (2*i)-1; k < 10; k++)
{
System.out.printf("*");
}
System.out.printf("\n");
}
for(i = 1; i <= 5; i++)
{
for(j = 5 - i; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = 2*i-1; k > 0 ; k--)
{
System.out.printf("*");
}
System.out.println();
}
}
}
// 실행 결과
/*
*********
*******
*****
***
*
*
***
*****
*******
*********
계속하려면 아무 키나 누르십시오 . . .
*/
⑤
실행 예)
* //공백 4 //* 1
*** //공백 3 //* 3
***** //공백 2 //* 5
******* //공백 1 //* 7
********* //공백 0 //* 9
******* //공백 1 //* 7
***** //공백 2 //* 5
*** //공백 3 //* 3
* //공백 4 //* 1
public class Test065
{
public static void main(String[] args)
{
int i,j,k;
for(i = 1; i <= 5; i++)
{
for(j = 5 - i; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = 2*i-1; k > 0 ; k--)
{
System.out.printf("*");
}
System.out.println();
}
for(i = 1; i <= 5; i++)
{
for(j = i-1; j >= 0; j--)
{
System.out.printf(" ");
}
for(k = (2*i)-1; k < 10; k++)
{
System.out.printf("*");
}
System.out.printf("\n");
}
}
}
// 실행 결과
/*
*
***
*****
*******
*********
*********
*******
*****
***
*
계속하려면 아무 키나 누르십시오 . . .
*/'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test067 실행 흐름의 컨트롤(제어문) continue (0) | 2020.09.04 |
|---|---|
| Test066 실행 흐름의 컨트롤(제어문) break (0) | 2020.09.04 |
| Test060 반복문의 중첩(3) (0) | 2020.09.04 |
| Test059 반복문의 중첩(2) (0) | 2020.09.04 |
| Test058 반복문의 중첩(1) (0) | 2020.09.04 |
Test060 반복문의 중첩(3)
※ 반복문을 중첩하여 아래의 구구단을 구현하라.
실행 예)
2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5
2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10
: : : :
2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45
6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9
6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18
: : : :
6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
public class Test060
{
public static void main(String[] args)
{
for (int h = 0; h <= 1; h++ ) // 문단 구성 → 1 2
{
for(int i = 1; i <= 9; i++) // 곱해지는 수 구성 → 1 2 3 4 5 6 7 8 9
{
for(int j = 2; j <= 5; j++) // 단 구성 → 2 3 4 5 6 7 8 9
{
System.out.printf("%4d * %d = %2d",j+h*4,i,((j+h*4)*i));
}
System.out.println();
}
System.out.println();
}
}
}
// 실행 결과
/*
2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5
2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10
2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15
2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 5 * 4 = 20
2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30
2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35
2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40
2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45
6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9
6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18
6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27
6 * 4 = 24 7 * 4 = 28 8 * 4 = 32 9 * 4 = 36
6 * 5 = 30 7 * 5 = 35 8 * 5 = 40 9 * 5 = 45
6 * 6 = 36 7 * 6 = 42 8 * 6 = 48 9 * 6 = 54
6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63
6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72
6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
계속하려면 아무 키나 누르십시오 . . .
*/'JAVA > 자바 기본 프로그래밍' 카테고리의 다른 글
| Test066 실행 흐름의 컨트롤(제어문) break (0) | 2020.09.04 |
|---|---|
| Test061~065 반복문의 중첩(4) 별찍기 (0) | 2020.09.04 |
| Test059 반복문의 중첩(2) (0) | 2020.09.04 |
| Test058 반복문의 중첩(1) (0) | 2020.09.04 |
| Test057 반복문 for문(2) (0) | 2020.09.04 |