# 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음
반환형 메소드이름(매개변수){
실행문장 1;:
실행문장 N;
}
메소드의종류
Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행
Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드
Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는 reference 변수
@ 클래스메소드접근형식(static으로선언)
클래스이름.클래스메소드이름(실매개변수)
@ 일반메소드접근형식
객체이름.객체메소드이름(실매개변수)
@ 실매개변수 : 메소드에넘겨주는매개변수
형식매개변수수, 데이터형일치
실매개변수값 -> 형식매개변수에값복사
@ 같은클래스의클래스메소드(static)인경우
클래스이름없이메소드이름(실매개변수)로호출
myMethod();
myMethodmain
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 intArray[];char charArray[];float floatArray[];
int[] intArray;char[] charArray;float[] floatArray;
intArray = new int[10];charArray = new char[20];floatArray = new float[5];
int intArray[] = new int[10];char charArray[] = new char[20];float floatArray[] = new float[5];
int intArray[] = {0,1,2,3,4,5,6,7,8,9};
기본형
* 생성된 하나의 배열을 다수의 레퍼런스가 참조 가능
배열원소접근 반드시배열생성후접근
배열변수명과 [] 사이에원소의인덱스를적어접근
배열의인덱스는 0부터시작
배열의마지막항목의인덱스는 (배열크기 – 1)
int[] intArray;intArray = new int[10];
intArray[3]=6; // 배열에 값을 저장int n = intArray[3]; // 배열로부터 값을 읽음
int intArray [];intArray[4] = 8; // 오류, intArray가 초기화되어 있지 않음
문제
# 크기가 5인 배열을 생성하여키보드로부터 숫자를 입력 받아 배열의 요소에 저장하고, 최대값과 최소값을 출력하는 프로그램이다.
# for문을 사용해서 출력한다.
@ 실습문제 2
배열이 만들어 질 때 크기가 정해짐 크기가 N인 배열은 0~ N-1 사이의 지수(index)를 가짐 배열 요소가 사용될 때마다 지수가 범위 내에 있는지를자동으로 검사
배열 지수가 범위를 벗어나면ArrayIndexoutOfBoundsException 예외 발생
예
위 코드에서 배열의 지수는 0 ~ 99
그러나 for 문에서 index가 100이 될 수 있음 -> 오류
char[] grades = new char[100];for(int index = 0; index <= 100; index++)
System.out.println(grades[index]);
배열인덱스 인덱스는 0부터시작하며마지막인덱스는 (배열크기 -1)
인덱스는정수타입만가능
for-each문 배열이나나열의각원소를순차적으로접근하는데매우유용함.
이외에는기본 for 문을사용하는것이좋음.
int intArray = new int[5];int n = intArray[-2]; // 실행 오류. -2는 인덱스로 적합하지 않음int m = intArray[5]; // 실행 오류. 5는 인덱스의 범위(0~4)를 넘었음
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차원 배열 선언
2차원 배열 생성
2차원 배열 선언, 생성, 초기화
int intArray[][];char charArray[][];float floatArray[][];
int[][] intArray;char[][] charArray;float[][] floatArray;
intArray = new int[2][5];charArray = new char[5][5];floatArray = new float[5][2];
int intArray[] = new int[2][5];char charArray[] = new char[5][5];float floatArray[] = new float[5][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년간 분기별
매출의 총액과 연평균 매출을 구하는 프로그램을 작성하라.
# 이때, 2차원 배열을 생성한 후, 반복문에서 length 필드를 사용하여 합계와 평균을 구한다.
@ 실습문제 3
정방형 배열 각 행의 열의 개수가 같은 배열
비정방형 배열 각 행의 열의 개수가 다른 배열
비정방형 배열의 생성
비정방형 배열의 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)
메소드가리턴하는배열 메소드가리턴하는배열의타입과차원은리턴받는배열레퍼런스의
타입과차원에일치해야함
리턴타입에배열의크기를지정하지않음