8일차 강의 정리
1. static 메소드(클래스 메소드)
public static 자료형 메소드명(인자){ }
메소드 의미 - 기능요소를 분리
자료형의 결정은 return xx; 중 xx에 의해 결정
단, return 없거나(생략) reuturn; 인 경우 void
public class Ex01 {
public static void main(String[] args) {
func1(hap()); //함수 func1 호출
System.out.println("---------------");
System.out.println(sum(hap())); //3+3
System.out.println("---------------");
System.out.println(sum(sum(hap())));//6+6
System.out.println("---------------");
System.out.println(sum(sum(sum(hap()))));//12+12
}//main end
static void func1(int a){
System.out.println("func1");
if(a>10)return; //return 을 만나면 아래의 소스 실행 X
System.out.println("a>10이라서 실행!!");
return;
}//func1 end
static int hap(){ //return 3
return 1+2;
}//hap end
static int sum(int a){
int add = a+a;
System.out.println(a+"+"+a+"="+add);
return add;
}//sum end
}//class end
결과
소스(return 과 break 의 차이)
public class Ex02 {
public static void main(String[] args) {
func1(10); //func1 호출
}//main end
static void func1(int a){
while(a<20){
System.out.println("run"+a++);
if(a>15)break; //break->a출력 O / reuturn->a출력 X
}
System.out.println("aaaaaaaa");
}//func1 end
}//class end
결과(break 경우)
결과(빨간 부분 return으로 변경한 경우)
*재귀함수
재귀함수는 자바에는 존재 하지않지만 재귀함수 처럼 작성이 가능하다
소스
public class Ex03 {
public static void main(String[] args) {
//재귀함수(나를 다시 호출)
//메소드 == 함수
say(5);
}//main end
static void say(int a){ //재귀함수
System.out.println("say hello");
if(a==1){return;}
say(--a); //다시 호출
}
}
결과
재귀함수이용한 문제
Q. 7+6+5+4+3+2+1=?
public class Ex03 {
public static void main(String[] args) {
qus(7,0);
//System.out.println(say(7));
}//main end
static void qus(int a,int sum){
System.out.print(a);
sum +=a;
if(a>1){
System.out.print("+");
}else {
System.out.print("="+sum);
return;}
qus(--a,sum);
}
//다른방법
/* static int say(int a){
if(a==1){
System.out.print(a+"=");
return 1;
}else{
System.out.print(a+"+");
}
return a+say(--a);
}*/
}//class end
결과
2. non-static 메소드
public 자료형 메소드명(인자){ }
static메소드는 static메소드 끼리의 접근만 허용
static메소드에서 non-static메소드로 접근하려면
클래스명 변수명 = new 클래스명(); 으로 생성된 변수를 통해서만 실행가능
반면, non-static메소드에서는 non-static메소드 접근 허용하며
또한 static으로의 호출도 허용
소스
public class Ex01 {
public static void main(String[] args) {
//func1(); //오류
Ex01 ex = new Ex01(); //static 없는 함수 func1 사용하는 방법(참조변수를 생성을 해야가능)
ex.func1(); //func1 호출(다른 클래스에서 호출이 불가)
System.out.println("----------------------");
ex.func2(100);
System.out.println("----------------------");
Ex01 ex1 = new Ex01(); //재선언
ex1.func2(50);
System.out.println("----------------------");
Ex01.prn(); //static 있는 함수 prn() 사용(내 클래스(Ex02)안의 static이기 때문에 "Ex02."생략가능)
}//main end
static void prn(){
System.out.println("난스태틱");
Ex01 me = new Ex01(); //여기서도 참조변수 생성 static에서 non-static을 사용하기위해
me.func1(); //non-static 호출
}//prn end
void func1(){
System.out.println("func1 호출");
}//func1 end
void func2(int a){
prn(); //non-static 에서 static메소드 호출은 그냥해도 ok
func1(); //main에서 이미 참조변수 생성해서 ok
System.out.println(a+"을 인자로 전달받은 메소드");
}//func2 end
}//class end
결과
소스(Scanner 사용)
import java.util.Scanner; //Scanner를 사용하기 위한 import
public class Ex02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner 선언
Ex01 func = new Ex01(); //non-static 메소드를 사용하기 위해
System.out.print("첫번째 수: ");
String input1 = sc.nextLine(); //입력
System.out.print("연산자: ");
String input2 = sc.nextLine(); //입력
System.out.print("두번째 수: ");
String input3 = sc.nextLine(); //입력
int a = Integer.parseInt(input1); //첫번째 숫자 String 형에서 int 형으로 변환
int b = Integer.parseInt(input3); //두번째 숫자 String 형에서 int 형으로 변환
func.cal(a, input2, b); //메소드 호출
}
void cal(int a,String s, int b){
switch(s){
case "+":
System.out.println(a+"+"+b+"="+(a+b));
break;
case "-":
System.out.println(a+"-"+b+"="+(a-b));
break;
case "*":
System.out.println(a+"X"+b+"="+(a*b));
break;
case "/":
System.out.println(a+"÷"+b+"="+(a/b));
break;
default:
System.out.println("잘못입력하셨습니다.");
}//switch end
}//cal end
}//class end
결과
새로운 내용!
Scanner 사용하여 입력을 콘솔 창에서 받는다
'* Programming > JAVA' 카테고리의 다른 글
DAY9 멤버필드 (0) | 2016.07.15 |
---|---|
Apache Ant (0) | 2016.07.13 |
DAY 7 문제 (0) | 2016.07.12 |
DAY6 random 함수 (0) | 2016.07.12 |
DAY6 문제 (0) | 2016.07.12 |