메소드를 함수 f(x)로 비유할 수 있다.
사용할때 입력 값에 따라 결과 값이 달라진다.
입력값 -> 알고리즘 -> 결과값
소괄호 쓰는 거면 왠만하면 메소드다
ex) println() 등
public static void main(String[] args) {
// 메소드 사용하기(main 안쪽 영역에서 사용하기)
double resultMain = addDouble(3.14, 4.2);
// 메소드 결과(두 수를 더하는 메소드 결과) 출력함.
System.out.println("첫 번째 실습 메소드 계산결과 : " + resultMain);
int sum = subNum(5,10);
// 메소드 결과(두 수 중 큰 수에서 작은 값을 빼는 메소드 결과) 출력함.
System.out.println("두 번째 실습 메소드 계산결과 : " + sum);
}
// 메소드 생성(main 영역을 벗어나서 작성)
// 1. 더하기
// 리턴 타입 : double / 메소드명 : addDouble / 매개변수 : double 2개
public static double addDouble(double n1, double n2) {
double result = n1 + n2;
return result;
}
// 2.빼기
// 리턴타입 : int / 메소드명 : subNum / 매개변수 : int 2개
// 매개변수로 받아온 데이터 2개를 뺀 결과값을 돌려주는 메소드
// 단, 큰 수에서 작은 수를 뺀 결과값을 돌려주기
public static int subNum(int n1, int n2) {
int result = 0;
if(n1 > n2) {
result = n1 - n2;
} else {
result = n2 - n1;
}
return result;
}
// 오버로딩 해보기 실습
public static void main(String[] args) {
// 메소드 오버로딩(오버로딩 책 209p 참조)
// 매개변수의 개수를 다르게 하고, 메소드의 이름을 똑같이 부여
System.out.println(add(3.5, 5.5));
System.out.println(add(3, 5));
}
// 메소드 생성하기
// 메소드 오버로딩 성립 조건
// 1. 메서드의 중복정의는 이름이 같아야 한다.
// 2. 매개변수의 갯수 또는 자료형(데이터 타입)이 달라야 한다.
// 3. 매개변수와 메소드의 이름이 동일하고 리턴 타입만 다른 경우 오버로딩이 아니다.
// 실수 데이터 2개를 입력 받아서 더해주는 메소드
private static double add(double num1, double num2) {
// 리턴에 계산 수식을 입력하여 리턴 전달 가능
return num1 + num2 ;
}
// 정수 데이터 2개를 입력 받아서 더해주는 메소드
private static int add(int num1, int num2) {
// 리턴에 계산 수식을 입력하여 리턴 전달 가능
return num1 + num2;
}
메소드 오버로딩 이후 add를 입력하면 2가지 타입의 메소드가 나옴.
문제 풀어보기
/*
* 메소드 예제 - 10에 더 가까운 수 구하기 1. 정수형 num1과 num2를 입력 받으세요. 2. num1과 num2중 10에 더 가까운
* 수를 반환하는 close10 매소드를 생성하세요.
*/
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
int num1 = sc.nextInt();
System.out.print("정수 입력 : ");
int num2 = sc.nextInt();
int result = close10(num1, num2);
System.out.println("10에 가까운 수 : " + result);
}
public static int close10(int num1, int num2) {
// 내가 작성한 코드 방법
int check = 0;
int n01 = 0;
int n02 = 0;
n01 = num1 > 10 ? num1 - 10 : num1;
n02 = num2 > 10 ? num2 - 10 : num2;
if(n01+n02 > 0) {
if (n01 == n02) {
total = 0;
} else if (n01 > n02) {
total = num1;
} else {
total = num2;
}
} else {
if (n01 == n02) {
total = 0;
} else if (n01 < n02) {
total = num2;
} else {
total = num1;
}
}
// 문제 풀어 생각해보기 !
// 5와 9를 봤을 때 10에 더 가까운 수는?
// 10-5=5 / 10-9=1 ---> 더 작은 수가 10에 가깝다고 판단!
// 11, 15
// 10-11=-1/10-15=-5 --> 더 작은 수가 10에 가깝다고 판단XXX
// -1, -5에서 -를 뺄 수 있는 방법은?
// 1) 큰 수에서 작은 수를 뺀다. (if 많아진다!)
// 2) 제곱만드는 법 : -1*-1 = 1 / -5*-5 = 25
if ( (10-num1)*(10-num1) < (10-num2)*(10-num2) ) {
check = num1;
} else if( (10-num1)*(10-num1) > (10-num2)*(10-num2) ) {
check = num2;
} else {
check = 0;
}
// 3) 절대값 : 수직선 위에서 원점으로 부터 어떤 수를 나타내는 점까지의 거리
if ( Math.abs(10-num1) < Math.abs(10-num2) ) {
check = num1;
} else if ( Math.abs(10-num1) > Math.abs(10-num2) ) {
check = num2;
} else {
check = 0;
}
return check;
}
( 완전수 )
예) 6 -> 6의 약수(본인 제외) 1, 2, 3
나머지들을 더하면 본인의 값이 나옴 6 !
/*
* 메소드 예제 - 완전 수 구하기
*
* 1.num2가 num1의 약수인지 확인하여 약수라면 true ,
* 아니라면 false를 반환하는 isDivisor 메소드를 만들어주세요.
*/
Scanner sc = new Scanner(System.in);
System.out.print("num1 입력 : ");
int num1 = sc.nextInt();
System.out.print("num2 입력 : ");
int num2 = sc.nextInt();
boolean divisor = isDivisor(num1, num2);
System.out.println(divisor);
System.out.println(getSum(6));
}
private static int getSum(int num) {
int total = 0;
for (int i = 1; i < num; i++) {
if(num % i == 0) {
total = total + i;
}
}
return total;
}
private static boolean isDivisor(int num1, int num2) {
boolean result = false;
// int[] array = new int[num1];
//
// for (int i = 1; i < array.length; i++) {
// if(num1 % i == 0) {
// array[i] = i;
// }
// if (array[i] == num2) {
// result = true;
// }
// }
// 선생님 풀이 방식
if (num1 % num2 == 0) {
result = true;
}
return result;
}
/* main 영역 */
public static void main(String[] args) {
// 메소드 호출
printFinish();
}
/* 메소드 영역 */
// 완전수 구하기 완료! 를 출력하는 메소드
public static void printFinish() {
// void : 리턴 타입이 없을을 의미하는 키워드(리턴 타입이 확정되지 않았을때)
System.out.println("완전수 구하기 완료!!");
}
그외. 단축키
import 단축키 : 컨트롤 + 시프트 + 알파벳 o