1. 배열

1-1. 2차 배열

2차원 배열의 선언, 크기 할당, 값의 대입에 대한 일괄처리

→ 2차원 배열의 경우 블록{...}을 2중으로 겹쳐서 2차원 배열을 표현한다.

→ 행과 열의 구분에는 콤마(,)가 사용된다.

→ 컴파일러가 블록{...}의 요소를 파악하면 행, 열의 크기가 산출될 수 있으므로 배열의 크기 설정을 위한 [][]에는 배열의 크기를 명시하지 않는다.

→ 데이터형[][] 배열이름 = new 데이터형[][]{

            {0행0열의 값, 0행1열의 값, ... ,0행n열의 값},
            {1행0열의 값, 1행1열의 값, ... ,1행n열의 값},
                                      ...
            {n행0열의 값, n행1열의 값, ... ,n행n열의 값}

     };

 

1-2. 2차원 배열에 대한 값의 대입 방법

  • 행, 열에 대한 인덱스를 통하여 값을 대입한다.
    → 배열이름[행][열] = 값;
    → int[][] grade = new int[3][3]
        grade[0][0] = 75;
        grade[0][1] = 82;
        grade[0][2] = 91;
                  ...
        grade[2][2] = 90;
  • 일괄지정하는 경우
    → int[][] grade = new int[][]{
                 {75, 82, 91},
                 {88, 64, 50},
                 {100, 100, 90}
        };

 

1-3. 2차원 배열의 길이

  • 2차원 배열의 길이는 행에 대한 측면과 열에 대한 측면을 나누어서 생각해야 한다.
  • 행의 길이
    → 1차 배열의 길이는 2차 배열에서는 행의 크기로 조회가 된다.
        int rows = grade.length;
  • 열의 길이
    → 열의 길이는 각 행에 대하여 개별적으로 조회해야 한다.
        int cols = grade[행].length;

// 성적표에 대한 2차 배열 생성
// 학급 성적을 위한 배열
int[][] grade = new int[3][3];
		
// 둘리의 과목별 점수
grade[0][0] = 75;
grade[0][1] = 82;
grade[0][2] = 91;
		
// 도우너의 과목별 점수
grade[1][0] = 88;
grade[1][1] = 64;
grade[1][2] = 50;
		
// 또치의 과목별 점수
grade[2][0] = 100;
grade[2][1] = 100;
grade[2][2] = 90;
		
// 2차 배열을 탐색하여 총점과 평균점수 구하기
for(int i=0; i<grade.length; i++) {
	// 반복문 안에서 선언된 변수는 매 실행시마다 새로 생성된다.
	int sum = 0;
	int avg = 0;
		
	for(int j=0; j<grade[i].length; j++) {
		// i번째 행의 j번째 열의 데이터를 누적처리
		sum += grade[i][j];
	}
    
	// i번째 위치의 평균점수 구하기 = 총점 / 과목수
	// i번째 학생의 과목수는 grade 배열의 i번째에 대한 길이
	avg = sum / grade[i].length;
	
	System.out.println("총점 = " + sum + ", 평균 = " + avg);
}



// 콘솔창 출력결과
총점 = 248, 평균 = 82
총점 = 202, 평균 = 67
총점 = 290, 평균 = 96

// 문제 1. num 배열에 저장된 요소의 합을 구하시오.
int[] num = new int[]{22, 3, 8, 12}

int sum = 0;
for(int i = 0; i < num.length; i++){
	sum += num[i];
}
System.out.println(sum);	// 45
// 문제 2. num2 배열에 저장된 요소의 합과 평균을 구하시오.
int[] num2 = new int[] {60, 95, 88};
		
int sum2 = 0;
for (int i = 0; i < num2.length; i++) {
	sum2 += num2[i];
}
int avg = sum2/num2.length;
System.out.println("합 : " + sum2 + ", 평균 : " + avg);	// 합 : 243, 평균 : 81
// 문제3. num3 배열에 저장된 요소의 최대값을 출력하시오.
int[] num3 = {94, 85, 95, 88, 90};
		
int max = num3[0];	// 첫번째 수를 기준으로 삼고
for(int i = 1; i < num3.length; i++) {	// 배열 안 나머지 숫자들과 비교
	if(max<num3[i]) {
		// 첫 번째 숫자보다 크면 max가 되고, 반복문이 도는 동안 계속 비교해서 가장 큰 수가 max가 된다.
		max = num3[i];
	}
}
System.out.println(max);	// 95



// 아래는 어떻게 푸는지 몰라서 무식하게 풀어본 거
int max = 0;
int a = num3[0];
int b = num3[1];
int c = num3[2];
int d = num3[3];
int e = num3[4];

if(a>b) {
	max = a;
} else {
	max = b;
}
if(max<c) {
	max = c;
} else if(max<d) {
	max = d;
} else {
	max = e;
}
System.out.println("최대값 : " + max);
// 문제 4. num4 배열에 저장된 요소의 홀수와 짝수의 합을 각각 구하시오
int[] num4 = new int[] {22, 3, 8, 12};
		
int oddsum = 0, evensum = 0;
for (int i = 0; i < num4.length; i++) {
	if(num4[i]%2==0) {
		evensum += num4[i];
	} else {
		oddsum += num4[i];
	}
}
System.out.println("홀수 합 : " + oddsum + ", 짝수 합 : " + evensum); // 홀수 합 : 3, 짝수 합 : 42

 

 

 

2. 메서드

2-1. 프로그램의 시작점

public static void main(String[] args){}

java 프로그램이 시작되는 시작점을 의미하는 main은 public, static, void, main, (String[] args) 라는 키워드로 구성된 하나의 블록{...}이다.

 

2-2. 다른 이름의 메서드 만들기

→ f(x) = x + 1

    f : 함수이름

    x : 매개변수

    x + 1 : 식→ f(1) = 2
    f(10) = 11
    f(5) = 6

 

2-3. 프로그램의 함수 = 메서드특정 기능(=연산)을 그룹화해서 재사용하기 위한 단위→ public static void 메서드이름(){             ...수행할 연산식...    }

 

2-4. 메서드의 호출정의된 메서드는 다른 메서드를 구성하는 {...} 안에서 다음의 형식으로 사용될 수 있으며, 이를 메서드를 호출한다고 한다.→ 메서드 이름();

 


public static void main(String[] args){
	// 여러 번 호출 가능
	f();	// 101
	f();
	f();
	f();
	f();
}

public static void f(){
	int x =100;
	int y = x+1;
	System.out.println(y);
}

 

2-5. 메서드 파라미터java 프로그램의 메서드(=함수)는 자신이 실행되는데 필요한 조건값을 메서드 이름 뒤의 괄호 안에서 변수 형태로 선언한다. 이를 메서드 파라미터라고 한다.→ public static void 메서드이름(변수형 변수이름){

 

    }

 

2-6. 다중 파라미터메서드가 연산을 수행하는데 두 개 이상의 파라미터가 필요하다면 콤마(,)로 구분하여 선언할 수 있다.→ public static void 메서드이름(변수형 변수이름, 변수형 변수이름, 변수형 변수이름){

 

    }

 

2-7. 파라미터를 갖는 메서드의 호출메서드를 정의하면서 파라미터가 명시되어 있다면 해당 메서드를 호출하면서 파라미터를 전달해 주어야 한다.→ 메서드이름(값1, 값2, 값3);

 


public static void main(String[] args){
	f1(100);		// 110
	plus(2, 5);		// 7
	minus(11, 9);		// 2
}

public static void f1(int a){
	int b = 10;
	System.out.println(a+b);
}

public static void plus(int x, int y) {	// 메서드 이름도 관련 있게 지을 것!
	System.out.println(x+y);
}

public static void minus(int x, int y){
	System.out.println(x-y);
}

 

2-8. 메서드의 리턴값

  • 메서드가 연산 결과를 자신이 호출된 위치에 반환하는 것을 "리턴"이라고 하며, 반환되는 값을 "리턴 값"이라고 한다.
  • 메서드 안에서 값을 리턴하기 위해서는 "return"이라는 키워드가 사용된다.
  • 값을 리턴하는 메서드는 선언시에 "void" 키워드 대신, 리턴하는 값에 대한 변수형이 명시된다. void는 리턴값이 없다는 의미이다.
  • → public static 리턴형 메서드이름(변수형 파라미터, ...){
                 return 리턴값;
        }

 


public static void main(String[] args){
	// 메서드의 리턴값을 변수에 저장
	int z = f1(5);
	System.out.println(z);	// 6
    
	boolean result = f2(10);
	System.out.println(result);	// true
	// 리턴값을 출력에 바로 사용 가능
	System.out.println(f2(2));	// false
}

public static int f1(int x){
	int y = x + 1;
	return y;
}

public static boolean f2(int x){
	if(x>5){
		return true;
	} else{
		return false;
 	}
}

 

2-9. 메서드 간의 상호 호출

  • 두 개의 함수를 연립하여 사용하기
    → f1(x) = x + 1
    → f2(y) = f1(y) + 10
    → k = f2(5);   // f1(5) + 10 > 5 + 1 + 10 > 16
  • java의 메서드 역시 서로 호출하는 것이 가능하다. 호출된 메서드가 값을 리턴하는 경우, 리턴받은 값을 다른 연산에 사용할 수 있다.
public static void main(String[] args){
	System.out.println(f2(100));	// 102
}

public static int f1(int x){
	return x+1;
}

public static int f2(int x){
	// 다른 메서드 호출
	return f1(x)+1;
}

 


// 문제 1. "Hello World~", "메서드가 호출되었습니다."를 출력하는 메서드를 각각 만들어 호출하세요.

public static void main(String[] args){
	helloWorld();	// Hello World~
	callMethod();	// 메서드가 호출되었습니다.
}

public static void helloWorld(){
	System.out.println("Hello World~");
}

public static void callMethod(){
	System.out.println("메서드가 호출되었습니다.");
}
// 문제 2. 
// 반환값이 없고 받는 인자값(매개변수, 파라미터)이 2개 있는 덧셈 메서드를 구현하여 인자값의 결과값을 출력하여라.

public static void main(String[] args){
	add(10, 10);	// 20
}

public static void add(int x, int y){
	System.out.println(x+y);
}
// 문제 3. 반환 값이 있고 받는 인자값(매개변수, 파라미터)이 없는 메서드를 구현하세요.

public static void main(String[] args){
	int b = a();
	System.out.println(b);	// 365
}

public static int a(){
	return 365;
}
// 문제 4. 반환값이 있고, 받는 인자값(매개변수, 파라미터)이 있는 메서드를 구현해보세요.

public static void main(String[] args){
	double result = div(41, 20)
	System.out.println(result)	// 2.0
}

public static double div(int a, int b){
	return a/b;
}

 

728x90

+ Recent posts