# 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음 반환형메소드이름 ( 매개변수 ) { 실행문장 1; : 실행문장 N; }
메소드의종류 Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행 Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드 Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는 reference 변수
@ 클래스메소드접근형식 (static으로선언 ) 클래스이름. 클래스메소드이름 ( 실매개변수 ) @ 일반메소드접근형식객체이름. 객체메소드이름 ( 실매개변수 ) @ 실매개변수 : 메소드에넘겨주는매개변수형식매개변수수, 데이터형일치실매개변수값 -> 형식매개변수에값복사 @ 같은클래스의클래스메소드 (static) 인경우클래스이름없이메소드이름 ( 실매개변수 ) 로호출
main mymethod mymethod();
public class Exma { public static void view_star() { System.out.println("*****"); } public static void main(string[] ar) { view_star(); System.out.println( 장동건 "); view_star(); view_star(); System.out.println( AOA"); System.out.println( 걸스데이 "); view_star(); } } 매개변수없이실행
public class Exam2 { public static void view_star(int y, int x) { } } for(int j = 0; j < y; ++j) { for(int I = 0; I < x; ++i) { System.out.print( * ); } System.out.println(); } return; public static void main(string[] args) { view_star(2, 5); System.out.println( 둘리 "); view_star(3, 3); view_star(2, 10); System.out.println(" 희동이 "); System.out.println(" 또치 "); view_star(4, 7); return; }
@ return 문수행을마친후결과값을되돌려줄때사용 예 ) static double fineaver(int a, int b){ double c; c = ( a + b ) / 20; return c; }
static int findmin(int number1, int number2) { int minimum; if (number1 < number2) minimum = number1; else minimum = number2; return minimum; } 메소드호출 : minvalue = findmin(value1, value2);
@ 재귀메소드자기자신을호출하는메소드 예제 ) 1 부터 N( > 1) 까지의합을구하는메소드 sum(n) = 1 + 2 +... + N N=1 인경우 sum(1) = 1 N>=2 인경우 sum(n) = sum(n - 1) + N sum(4) = 4 + sum(3) 3+sum(2) 2+sum(1) 1
static int findsum(int N) { int sum; if (N == 1) sum = 1; else sum = findsum(n-1) + N; return sum; }
@ 한클래스내에서같은이름의메소드사용 @ 같은이름의메소드는매개변수의타입, 개수가달라야함 @ 매개변수의개수나타입에맞는메소드수행
@ 문제!!! 세정수의평균을구하는메소드를작성하라 @ 알고리즘 1. 평균을저장하는변수를선언한다 2. 평균은세정수들의합을 3으로나누어구한다 3. 구한평균값을반환한다
static double findaver(int num1, int num2, int num3) { double aver; aver = (num1+ num2 + num3) / 3.0; return aver; }
@ 실습문제 1 문제 # 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. # 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math 클래스의적절한메소드를이용하여구하라.(Math.sqrt()) # 작성된메소드들을사용하여주어진직사각형모양의땅의둘레, 면적과대각선의길이를구하는프로그램을작성하라.
# 배열 (array) 인덱스와인덱스에대응하는데이터들로이루어진자료구조 배열을이용하면한번에많은메모리공간선언가능 배열에는같은종류의데이터들이순차적으로저장하는공간 데이터들이순차적으로저장됨 반복문을이용하여처리하기에적합한자료구조 배열인덱스 0 부터시작 인덱스는배열의시작위치에서부터데이터가있는상대적인위치
c/c++ 와다르게다음의두단계가필요
배열선언과배열생성의두단계필요 배열선언 int char float intarray[]; chararray[]; floatarray[]; int[] char[] float[] intarray; chararray; floatarray; 배열생성 intarray = new int[10]; chararray = new char[20]; floatarray = new float[5]; int char float intarray[] = new int[10]; chararray[] = new char[20]; floatarray[] = new float[5]; 선언과초기화 배열이생성되면서원소의값이초기화됨 int intarray[] = {0,1,2,3,4,5,6,7,8,9};
기본형
* 생성된하나의배열을다수의레퍼런스가참조가능
배열원소접근 반드시배열생성후접근 int intarray []; intarray[4] = 8; // 오류, intarray 가초기화되어있지않음 배열변수명과 [] 사이에원소의인덱스를적어접근 배열의인덱스는 0 부터시작 배열의마지막항목의인덱스는 ( 배열크기 1) int[] intarray; intarray = new int[10]; intarray[3]=6; // 배열에값을저장 int n = intarray[3]; // 배열로부터값을읽음
@ 실습문제 2 문제 # 크기가 5 인배열을생성하여키보드로부터숫자를입력받아배열의요소에저장하고, 최대값과최소값을출력하는프로그램이다. # for 문을사용해서출력한다.
배열이만들어질때크기가정해짐 크기가 N 인배열은 0~ N-1 사이의지수 (index) 를가짐 배열요소가사용될때마다지수가범위내에있는지를자동으로검사 배열지수가범위를벗어나면 ArrayIndexoutOfBoundsException 예외발생 예 char[] grades = new char[100]; for(int index = 0; index <= 100; index++) System.out.println(grades[index]); 위코드에서배열의지수는 0 ~ 99 그러나 for 문에서 index 가 100 이될수있음 -> 오류
배열인덱스 인덱스는 0 부터시작하며마지막인덱스는 ( 배열크기 -1) 인덱스는정수타입만가능 int intarray = new int[5]; int n = intarray[-2]; // 실행오류. -2 는인덱스로적합하지않음 int m = intarray[5]; // 실행오류. 5 는인덱스의범위 (0~4) 를넘었음 for-each 문 배열이나나열의각원소를순차적으로접근하는데매우유용함. 이외에는기본 for 문을사용하는것이좋음. Int[] num = {1, 2, 3, 4, 5}; int sum = 0; for(int i : num) // 반복될때마다 i 는 num[0], num[1],, num[4] 값을설정됨 sum += i; System.out.println( 합은 +sum);
배열의길이를구하는객체 length 배열의크기는배열레퍼런스변수를선언할때결정되지않음 배열의크기는배열생성시에결정되며, 나중에바꿀수없음 배열의크기는배열의 length라는필드에저장 Int intarray[]; IntArray = new int[5]; int size = intarray.length; //size 는 5 가된다.
2 차원배열선언 int intarray[][]; char chararray[][]; float floatarray[][]; int[][] intarray; char[][] chararray; float[][] floatarray; 2 차원배열생성 intarray = new int[2][5]; chararray = new char[5][5]; floatarray = new float[5][2]; int char float intarray[] = new int[2][5]; chararray[] = new char[5][5]; floatarray[] = new float[5][2]; 2 차원배열선언, 생성, 초기화 int intarray[][] = {{0,1,2},{3,4,5},{6,7,8}}; char chararray[][] = {{'a', 'b', 'c'},{ d'.'e','f'}}; float floatarray[][] = {{0.01, 0.02}, {0.03, 0.04}};
2 차원배열의 length i.length -> 2차원배열의행의개수로서 2 i[n].length는 n번째행의열의개수 i[0].length -> 0번째행의열의개수로서 5 i[1].length -> 1번째행의열의개수로서역시 5
@ 실습문제 3 문제 # 한회사의지난 3 년간분기별매출의총액과연평균매출을구하는프로그램을작성하라. # 이때, 2 차원배열을생성한후, 반복문에서 length 필드를사용하여합계와평균을구한다.
정방형배열 각행의열의개수가같은배열 비정방형배열 각행의열의개수가다른배열비정방형배열의생성
비정방형배열의 length i.length -> 2차원배열의행의개수로서 4 i[n].length는 n번째행의열의개수 i[0].length -> 0번째행의열의개수로서 1 i[1].length -> 1번째행의열의개수로서 2 i[2].length -> 2번째행의열의개수로서 3 i[3].length -> 3번째행의열의개수로서 4
배열전체가메소드의매개변수로넘겨질수있음. -> 배열객체에대한참조가넘겨짐 형식매개변수들과실제매개변수들이서로별명 메소드내에서배열요소를바꾸면원요소바뀜. -> 참조값을넘기기때문에 (call by reference)
메소드가리턴하는배열 메소드가리턴하는배열의타입과차원은리턴받는배열레퍼런스의 타입과차원에일치해야함 리턴타입에배열의크기를지정하지않음