#return
- return은 반환값이 없어도 사용가능
return을 만나는 순간 호출한 곳으로 돌아감
ex)
class TestReturn
{
public static void main(String[] args)
{
test(3);
}
public static void test(int n)
{
if(n==3)
{
return;
System.out.println(n); //return 이후이므로 실행되지 않는다
}
}
}
#재귀메소드 : 자기 자신을 호출하는 메소드
ㄴ 일반메소드로 구현이 가능한 것은 일반메소드로 구현하는 것이 더 좋다
재귀메소드를 계속 자신을 호출하는 형태로 끝낼 경우 메모리 과다 사용되어 에러가 발생하므로
반드시 끝이 날 수 있는 호출로 써줘야 한다!
ex)
class Ex1
{
public static void main(String[] args)
{
reHi(3);
}
public static void reHi(int n)
{
if(n==0) return;
System.out.println("Hi");
reHi(n-1);
}
}
/* 결과 : Hi
Hi
Hi 출력 */
- reHi(n-1);
n--로 작성 시 무한반복된다. (호출 시 감소 전 값으로 호출하기 때문!)
증감연산자를 사용하고 싶을 땐 --n으로 호출할 것1
ex)
class Ex2
{
public static void main(String[] args)
{
System.out.println("Start");
reHi(3);
System.out.println("End");
}
public static void reHi(int n)
{
if(n==0) return;
System.out.println("Hi");
reHi(n-1);
System.out.println("Bye");
}
}
/* 결과 : Start
Hi
Hi
Hi
Bye
Bye
Bye
End 출력 */
Q. Factorial을 재귀메소드로 표현하시오.
A.
class MTest1
{
public static void main(String[] args)
{
System.out.println(factorial(4));
}
public static void factorial(int n)
{
if(n==1) return1;
else return n*factorial(n-1);
}
}
Q. 1부터 n까지의 합을 재귀메소드로 표현하시오.
A.
class MTest2
{
public static void main(String[] args)
{
System.out.println(addSum(100));
}
public static void addSum(int num)
{
if(num==1) return1;
else return num+factorial(num-1);
}
}
Q. 정수 n을 전달 받아서, 2의 N승을 계산하여 반환하는 메소드를 재귀 형태로 정의할 것
A.
class MTest3
{
public static void main(String[] args)
{
System.out.println(mutiplier(2));
System.out.println(mutiplier(4));
}
public static void mutiplier(int num)
{
if(num==1) return2;
else return 2*mutiplier(num-1);
}
}
Q. 10진수 정수를 전달받아, 전달받은 정수에 해당하는 2진수를 출력하는 메소드를 재귀 형태로 정의할 것
A.
class MTest4
{
public static void binaryNum(int num)
{
int rest=0;
if(num<=1) System.out.println(num);
else
{
rest=num%2;
binaryNum(num/2);
System.out.println(rest);
}
public static void main(String[] args)
{
binaryNum(25);
System.out.println();
}
}
Q. 정수 하나를 넘겨주면 그 정수번째의 피보나치수열을 리턴해주는 메소드
피보나치수열 - ex) 1 1 2 3 5
A.
class MTest5
{
public static void fibonacci(int i)
{
if(i==1||i==2) return1;
else return fibonacci(i-1)+fibonacci(i-2);
}
public static void main(String[] args)
{
int i=1;
for(i=1;i<10;i++)
System.out.println(fibonacci(i));
}
}
#클래스 = 멤버변수 + 멤버메소드
ex)
class Number
{
int num; // 멤버변수
public void setNum(int n)
{
num=n;
}
public void printCurrentState()
{
System.out.println(num);
}
}
class NumberMain //반드시 Main클래스가 필요하다
{
public static void main(String[] args)
{
Number n1 = new Number(); // 객체 생성방법 : 클래스명 변수명 = new 클래스명();
n1.setNum(5); // n1은 참조변수 .은 접근 연산자
n1.printCurrentState();
Number n2 = new Number();
n1.setNum(10);
n1.printCurrentState();
Number n3 = null; // null - 아무 것도 가리키는 것이 없다는 의미
n3=n1; // 주소를 알게 되어 접근이 가능해진다
n3.printCurrentState();
n3=n2;
n3.printCurrentState();
}
}
- 참조변수(Reference Variable) : 오브젝트(인스턴스) 접근 시 필요한 물리적 주소를 가리킴 ex) 홍길동 집 주소
- 멤버변수를 직접 초기화 하지 않아도 각 데이터형의 기본값으로 초기화 되어 있다.
int는 0으로 초기화 되어있다.
- 클래스 ex) 자동차설계도면
오브젝트(인스턴스) ex) 소나타
Q.
삼각형 면적 : 삼각형 밑변 * 높이 /2
원의 둘레 : 2*3.14*반지름
면적 : 3.14*반지름*반지름
Q. 클래스 만드는 실습해보기
① 삼각형 클래스 만들기.
멤버 변수(인스턴스 변수)
밑변
높이
넓이
멤버 메소드(인스턴스 메소드)
삼각형 초기화 하는 메소드
삼각형의 면적 구하는 메소드
삼각형의 현재 상태 출력하는 메소드(밑변, 높이, 넓이 출력)
② 삼각형 인스턴스 3개 만들기
1. 밑변 10, 높이 5
2. 밑변 4, 높이 2
3. 밑변 20 높이 10
③ ②에서 만든 삼각형 인스턴스들의 상태값 출력하기(밑변, 높이, 면적)
A.
class Triangle 해당 내용 만들어주는 클래스
{
double width;
double height;
double area;
public void setTriangle(double width, double height)
{
this.width=width;
this.height=height;
}
public void areaOfTriangle(int n2)
{
area=width * height / 2;
}
public void printTriangle()
{
System.out.println("밑변"+width);
System.out.println("높이"+height);
System.out.println("면적"+area);
}
}
class TriangleMain 실행하는 메인 클래스
{
public static void main(String[] args)
{
Triangle t1 = new Triangle();
t1.setTriangle(10,5);
t1.areaOfTriangle();
t1.printTriangle();
Triangle t2 = new Triangle();
t2.setTriangle(4,2);
t2.areaOfTriangle();
t2.printTriangle();
Triangle t3 = new Triangle();
t3.setTriangle(20,10);
t3.areaOfTriangle();
t3.printTriangle();
}
}
Q.
① 원 클래스 만들기
멤버 변수(인스턴스 변수)
반지름
면적
둘레
파이
멤버 메소드(인스턴스 메소드)
원 초기화 하는 메소드
원의 둘레 구하는 메소드
원의 면적 구하는 메소드
원의 상태를 출력하는 메소드(반지름, 둘레, 면적)
② 원 인스턴스 3개 만들기
1. 반지름 5
2. 반지름 10
3. 반지름 30
③ ②에서 만든 원 인스턴스들의 상태값 출력하기
A.
class Circle
{
double radius;
double area;
double perimeter;
final double PI=3.14;
public void setCircle(double radius)
{
this.radius = radius;
}
public void perimeterOfCircle()
{
perimeter = 2 * PI * radius;
}
public void areaOfCircle(int n2)
{
area=PI * radius * radius;
}
public void printCircle()
{
System.out.println("반지름"+radius);
System.out.println("둘레"+perimeter);
System.out.println("면적"+area);
}
}
class CircleMain
{
public static void main(String[] args)
{
Circle c1 = new Circle();
c1.setCircle(5);
c1.perimeterOfCircle();
c1.areaOfCircle();
c1.printCircle();
Circle c2 = new Circle();
c2.setCircle(10);
c2.perimeterOfCircle();
c2.areaOfCircle();
c2.printCircle();
Circle c3 = new Circle();
c3.setCircle(30);
c3.perimeterOfCircle();
c3.areaOfCircle();
c3.printCircle();
}
}
'SW > Java' 카테고리의 다른 글
[필기정리] Day7 - 클래스패스, 접근제어 지시자, 엑세스메소드 등 (0) | 2020.06.21 |
---|---|
[필기정리] Day6 - 카멜케이스, 생성자 (0) | 2020.06.21 |
[필기정리] Day4 - 형변환, 비트연산자 등 (0) | 2020.06.21 |
[필기정리] Day3 - 난수, 진법, 예시문제 (0) | 2020.06.19 |
[필기정리] Day2 - 연산자, 반복문 등 (0) | 2020.06.19 |