본문 바로가기

개발일지/Java + Spring

[Java] 함수 설명 + 만드는 방법

<최대공약수 구하기>

public class MainFunction_1 {
	public static int function(int a, int b, int c) {
		int min;
		if(a > b) { 
			if(b > c) {min = c;}
			else {min=b;}
		}else {
			if(a > c) {min = c;}
			else {min = a;}
		}
		for(int i=min; i>0; i--) {
			if(a%i == 0 && b%i == 0 && c%i == 0) {return i;}
		}
		return -1; 
	}
	public static void main(String[] args) {
		System.out.println("400 300 750의 최대 공약수는? " + function(400, 300, 750));
	}

}

 

 

public static int function(int a, int b, int c) {

-public static

-int 반환형이 정수로 되어 있어서 return값이 정수이다.
-function 함수명 
-(int a, int b, int c) 매개변수

메인에서 function(400, 300, 750)으로 불렀다. 
매개변수와 메인에서 부르는 개수가 같아야 하고, 타입이 같아야 한다.

 

 

int min;
		if(a > b) { 
			if(b > c) {min = c;}
			else {min=b;}
		}else {
			if(a > c) {min = c;}
			else {min = a;}
		}

셋 중에서 가장 작은수를 찾는다. (=min)

 

for(int i=min; i>0; i--) {
			if(a%i == 0 && b%i == 0 && c%i == 0) {return i;}
		} return -1;

-min이 0이 될 때까지 for문을 돌린다.
-세 개의 숫자들이 나머지가 모두 0이 될 수 있는 최대공약수(i)를 찾는다.

-그 값(i)을 리턴한다. 

-값이 없다면 -1을 리턴한다.

 

리턴값이 -1인 이유는 위의 계산에서 답이 -1이 나올 수 없기 때문에 실패의 의미로 넣은 수이다. 처음 public static int로 반환형을 정수로 잡아서 숫자만 입력할 수 있음

 


<약수의 n번째 값>

public class MainFunction_2 {
				//반환형, 함수명 (매개변수)
	public static int function77(int number, int k) {
		for(int i=1; i<=number; i++) {
			if(number%i == 0) {
				k--;
				if(k == 0) { return i; }
			}
		}
		return -1;
	}
	
	public static void main(String[] args) {
		int result = function77(3050, 10);
		if(result == -1) {
			System.out.println("3050의 10번째 약수는 없습니다.");
		}else {
			System.out.println("3050의 10번째 약수는 "+result+"입니다.");
		}

	}

}

 

int result = function77(3050, 10);

3050의 약수를 구하고, 10번째 약수를 출력하라는 문장


function77 함수에서 return -1이 for문 바깥에 있는 이유는 반복문이 끝나고 -1을 반환해야하기 때문이다. 

 


<글자 출력>

public class MainFunction_3 {
	public static char function88(String input) {
		return input.charAt(input.length()-1);//숫자가 0부터 시작하니까 -1
	}
	
	public static void main(String[] args) {
		System.out.println("Hellow World의 마지막 글자는? "+ function88("Hellow Word"));

	}

}

반환형을 char한 이유는 한 가지 문자만 출력하기 위해서이다.

 

charAt()

이 필요한 이유는 사용자가 문자를 입력할 때 한 글자씩 입력하는 경우는 극히 드물다. 문자열을 입력 받는 경우가 대다수인데 그 중에서 한 글자만 char타입으로 변환해준다. 그렇다면 Scanner로 입력 받으면서도 char 타입을 사용할 수 있다. 때문에 charAt()을 사용하기 위해서는 입력 받은 String 타입 문자열이 필요하다. 그리고 char값을 받을 char타입의 변수가 필요하다. 문자열의 순서는 0부터 시작한다. 

 


<가장 큰 값 불러오기>

public class MainFunction_4 {
	
	public static int max(int a, int b) {
		return(a > b) ? a : b;
	}
    
	public static int function99(int a, int b, int c) {
		int result = max(a, b); 
		result = max(result, c); 
		return result; 
	}
	
	public static void main(String[] args) {
		System.out.println("345, 567, 789 중에서 가장 큰 값은?"
							+ function99(345, 567, 789));
		
	}
}

최대한 함수를 여러개로 쪼갠 이유가 자바의 특성을 보여주는 것이다. 여러번 불러서 사용할 수 있도록 자잘하게 나눈 것이다. 

 

public static int max(int a, int b) {
		return(a > b) ? a : b;
	}

일단 두 개만 갖고 와서 큰 숫자를 반환을 한다. 삼항 연산자로 (괄호) 값이 맞으면 a로 가고, 틀리면 b로 간다. 345과 567 두 수를 비교해서 더 큰 수를 출력한다. 

 

	public static int function99(int a, int b, int c) {
		int result = max(a, b); 
		result = max(result, c); 
		return result; 
	}

public static int function99(int a, int b, int c) {

int result = max(a, b);

max를 부른다. 여기서 작업을 한다. 조건에 따라서 result 값이 달라짐

 

result = max(result, c);

두번째 작업을 한다.


return result;

마지막은 가장 큰 값이 들어간다. 
}