
-변수 : 데이터를 담는 역할
-메소드 호출문(함수) : 특정한 기능적인 역할을 한다.
중복된 코드를 최소화 하기 위해 메소드를 사용 -> 코드의 재활용, 가독성↑
유지보수하는데 돈이 더 많이 듦. 한번 코드짤 때 최소한으로 짜야 함.
잘만들어놓은 메소드 하나 ->잘 우려먹을 수 있음
-method형식
static + 리턴 + 메소드이름(소문자로 시작/newRec) (파라미터){
메소드 내용
return
}
메소드의 니즈를 파악해서 옆에 한줄 니즈 //주석으로 달아주기.
-
메소드의 리턴형 여부를 따져주기 ( void 출력만 함->return 불필요)
-
return형 일치시켜주기
-
파라미터에서 제일 중요한 것은 데이터형 일치
-
파라미터도 지역변수임 (그 메소드 안에서만 살아있음)
파라미터/인자/매개변수 : 다 똑같은 말
★★메소드 호출 중요함. 기존의 메소드는 만들어져 있음 자바 API로
파라미터가 필요없을 때 -> 값만 리턴해줌(뎁)
#메소드 예제
public static void main(String[] args) {
//총점, 평균을 구하는 메소드
int sumresult,avgresult, kor, math, eng = 0;
System.out.println("국어 수학 영어 성적을 입력해주세염");
Scanner sc = new Scanner(System.in);
kor = sc.nextInt();
math = sc.nextInt();
eng = sc.nextInt();
sumresult = add(kor,math,eng);
avgresult = avg(kor,math,eng);
System.out.println("국영수 총점 : "+sumresult);
System.out.println("국영수 평균 : "+avgresult);
}
static int add(int num1,int num2, int num3) {
int sum;
sum = num1 + num2+ num3;
return sum;
}
static int avg(int num1,int num2, int num3) {
int avg;
avg = (num1 + num2+ num3)/3;
return avg;
}
public static int change(int n) { //main메소드 안에 있는 num변수랑 다른 것. 변수이름 동일해도 work well
n += 100;
return n;
}
public static void main(String[] args) {
//Call By Value : 값에 의한 호출 - 실제값을 넣는다해도 원본값이 변하지 않음
int num=100;
num = change(num);
System.out.println(num);
}
200 (return 안해주면 원본값 안바뀌어서 100)
public static void change2(int brr[]) { //brr = arr 같은 주소값 가지게 됨(같은 값을 참조하게 됨)
brr[0]=300;
}
public static void main(String[] args) {
//Call By Reference 주소값에 의한 호출
int num = 100;
int arr[] = {10};//주소값이 들어가있음
change2(arr);
System.out.println(arr[0]);
}
300 - 메소드 호출에 의해 brr=arr이 같은 주소값을 가지게 되어 변경된 값의 arr[0]을 호출하게 됨.
public static boolean equals(int a[], int b[]) {
if(a.length != b.length) {//자릿수, 값의 일치여부
return false;
}
for(int i=0;i<a.length;i++) {
if(a[i] != b[i])
return false;
}
return true;
}
public static void main(String[] args) {
int num1[] = {1,2,3,4,5};
int num2[] = {1,2,3,4,5,6};
if(equals(num1,num2)){ //if 안에는 무조건 boolean타입
System.out.println("서로 같다");
}else {
System.out.println("서로 다르다");
}
}
서로 다르다
-재귀함수(탈출조건도 만들어줘야함) - if문
static int f(int n) {
if(n>0) { //탈출조건
return n*f(n-1);
}else {
return 1;
}
}
public static void main(String[] args) {
// 5! => 5*4*3*2*1
Scanner sc = new Scanner(System.in);
System.out.print("정수 입력: ");
int x = sc.nextInt();
System.out.println(x+ "! = " +f(x)+"입니다.");
}
정수 입력: 5
5! = 120입니다.
public static void main(String[] args) {
// 0~n까지의 합계 구하기 =>재귀함수
Scanner sc = new Scanner(System.in);
System.out.print("n: ");
int n = sc.nextInt();
System.out.println("0부터 "+n+"까지의 합은 :"+f(n));
}
static int f(int a) {
if(a>0) {
return a+f(a-1);
}else //if(a==0)
return 0;
}
n: 10
0부터 10까지의 합은 :55
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("n: ");
int n = sc.nextInt();
int arr[] = {10,20,30,40};//arr[0]에서 arr[n-1]까지의 합을 구하라
System.out.println(arr[0]+"부터 "+arr[n-1]+"까지의 합은 "+f(n,arr[]);
}
static int f(int a,int b[]) {
if(a<b.length) {
return b[a]+f(a-1,b);
}else
return b[0]+b[1]+b[2]+b[3];
}
(강사님) public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("n: ");
int n = sc.nextInt();
int arr[] = {10,20,30,40};//arr[0]에서 arr[n-1]까지의 합을 구하라
System.out.println("n까지의 합은 "+f(n-1,arr));
}
static int f(int a,int b[]) {
if(a<0 || a>b.length) {
return 0;
}else {
return b[a] + f(a-1,b);
}
}
**유클리드 호제법(최대공약수 만들기)
static int gcd(int x, int y) {
if(x%y == 0) { // if(y == 0) {return x;}
return y;
}else {
return gcd(y,x%y);
}
}
public static void main(String[] args) {
int x =12;
int y = 24;
System.out.println("최대공약수 : " +gcd(x,y));
}
최대공약수 : 12
(최소공배수 만들기)
static int gcd(int x, int y) {
if(x%y == 0) {
return y;
}else {
return gcd(y,x%y);
}
}
public static void main(String[] args) {
int x =12;
int y = 24;
System.out.println("최소공배수 : " + (gcd(x,y)*(x/gcd(x,y))*(y/gcd(x,y))));
}
-ArraySort(1차원)
(오름차순 정렬) int arr[] = {5,1,4};
Arrays.sort(arr);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+", "); //앞에서부터 출력
}
1, 4, 5,
(내림차순 정렬) (#1) for(int i=0;i<arr.length;i++) {
System.out.print(arr[(arr.length-1)-i]+", ");
}
System.out.println();
}
(#2) for(int i=arr.length-1;i>=0;i--) { //뒤에서부터 출력
System.out.print(arr[i]+", ");
}
5, 4, 1,
-Array.sort(Comparator) - 2차원
int arr2[][]= {{2,90},{1,60},{3,20}};
Arrays.sort(arr2,new Comparator<int[]>() {
@Override
public int compare(int[] o1,int[] o2) {
//o2-o1 => 내림차순(if문 안쓰고)
//o1-o2 => 오름차순
//return o2[0]-o1[0]
if(o1[0]<o2[0]) { //1차원배열의 첫번째 숫자비교
return -1; //자리 안바꿔도 됨.
}else if(o1[0]>o2[0]) {
return 1; //자리를 바꿔라.
}else {
return 0;
}
}
});
for(int i=0;i<arr2.length;i++) {
for(int j=0;j<2;j++) {
System.out.print(arr2[i][j]+", ");
}System.out.println();
}
1, 60,
2, 90,
3, 20,
-선택 정렬(selection sort) ---ppt내용
-전체 원소들 중에서 기존 의자에 맞는 원소를 선택하여 자리를 교환하는 방식으로 정렬
public class SelectSort {
public void selectionSort(int a[]) {
int i,j,min;
for(i=0;i<a.length-1;i++) {
min=i;
for(j=i+1;j<a.length;j++) {
if(a[j]<a[min])
min=j;
}
swap(a,min,i);
System.out.printf("\n선택 정렬 %d 단계 : ",i+1);
for(j=0;j<a.length-1;j++)
System.out.printf("%3d ",a[j]);
}
}
public void swap(int a[],int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
class ex2{
public static void main(String[] args) {
int a[] = {69,10,30,2,16,8,31,22};
Sort S = new Sort();
System.out.printf("\n정렬할 원소 : ");
for(int i=0;i<a.length;i++)
System.out.printf(" %d",a[i]);
System.out.println();
S.selectionSort(a);
}
}
}
//Mission 5 추가정렬문제
//2차원 정렬(평균을 기준으로 오름/내림)
//1. swap으로 for문 돌려서 자리바꾸기
//2. comparator사용해서
for(int i=0;i<arr.length;i++) {//내림차순 정렬
for(int j=i+1;j<arr.length;j++) {
if(arr[i][4]<arr[j][4]) {
int temp[];
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
★★오늘의 정리
메소드
-
왜쓰나요~?
-
정의(return/parameter/내용)
-
호출(리턴/파라미터)
콜바이벨류, 콜바이레퍼런스
call by value, call by reference
정렬 -API
-알고리즘(선택정렬)
Q. 선택정렬을 재귀함수로 만들어보기. (1,2차 배열)
for'외부 (함수 역할)
for내부 (최솟값, 최댓값 찾는역할)
함수 = 바깥for문 역할을 한다.
'FULLSTACK > JAVA' 카테고리의 다른 글
JAVA 7차시 - 접근제어자, 캡슐화, 예외처리(try-catch), 오버로딩, Static정적변수, (전화번호 관리프로그램 Phoneinfo만들기), (게시판 구현하기) (0) | 2020.11.12 |
---|---|
JAVA 6차시 - 재귀함수 구현(피보나치 수열, 선택정렬), 객체지향 프로그램, 생성자 (0) | 2020.11.12 |
JAVA 주말과제 및 복습 - Mission 6,7,8 & 중복for문 연습 (0) | 2020.11.12 |
JAVA 4차시 - 2차원배열, 중첩for문, 배열의 복사 (0) | 2020.11.12 |
JAVA 3차시 - IF, SWITCH, WHILE, FOR, 1차배열 (0) | 2020.11.12 |