728x90

-변수 : 데이터를 담는 역할

-메소드 호출문(함수) : 특정한 기능적인 역할을 한다.

중복된 코드 최소화 하기 위해 메소드를 사용 -> 코드의 재활용, 가독성↑

유지보수하는데 돈이 더 많이 듦. 한번 코드짤 때 최소한으로 짜야 함.

잘만들어놓은 메소드 하나 ->잘 우려먹을 수 있음

-method형식

static + 리턴 + 메소드이름(소문자로 시작/newRec) (파라미터){

        메소드 내용

        return

}

 

메소드의 니즈를 파악해서 옆에 한줄 니즈 //주석으로 달아주기.

  1. 메소드의 리턴형 여부를 따져주기 ( void 출력만 함->return 불필요)

  2. return형 일치시켜주기

  3. 파라미터에서 제일 중요한 것은 데이터형 일치

  4. 파라미터도 지역변수임 (그 메소드 안에서만 살아있음)

파라미터/인자/매개변수 : 다 똑같은 말

★★메소드 호출 중요함. 기존의 메소드는 만들어져 있음 자바 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;

                                }

                        }

                }

 

 

★★오늘의 정리

메소드

  1. 왜쓰나요~?

  2. 정의(return/parameter/내용)

  3. 호출(리턴/파라미터)

콜바이벨류, 콜바이레퍼런스

call by value, call by reference

정렬 -API

        -알고리즘(선택정렬)

Q. 선택정렬을 재귀함수로 만들어보기. (1,2차 배열)

    for'외부 (함수 역할)

        for내부 (최솟값, 최댓값 찾는역할)

함수 = 바깥for문 역할을 한다.

 

 

 

 

728x90

+ Recent posts