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

+ Recent posts