국비수업/수업정리

배열 이주하기 / 함수

밀김 2023. 3. 7. 12:05
728x90

 

 

 

 

 

 

- 배열을 더큰 배열에 이주하기 위해서는 더 큰 배열을 하나 만들어야한다(tmp만들어서 값 옮기는 과정과 비슷함) 

 

- 값을 옮겨주면 원래 있던 작은 배열은 가비지콜렉터로 이동

 

- index는 현재 데이터의 개수와 일치한다

 

 

- 배열 늘리고,이주하기 코드

	Exam[] exams = new Exam[5];
		//exams배열을 참조하는 다섯칸짜리 Exam배열 생성
		int index = 0;


		END: while (true) {
			if(index == exams.length) {//공간이 충분한지 또는 여유공간이 잇는지
				//인덱스가 exams길이의 최대만큼 됐을때
				//공간을 늘리는 코드 작성
				Exam[] temp = new Exam[exams.length+3];
				//배열을 옮길 큰방을 마련
				for(int i=0; i<exams.length; i++)
					temp[i] = exams[i];
				//큰방 temp에 exams값을 옮긴다
					exams = temp;
				//temp로 exams를다시 정의해주면서 exams는 가비지 콜렉터로 이동	
			}
			
			int menu;//switch작동을 위한
			{
				System.out.println("┌────────────────────────┐");
				System.out.println("│          성적관리         │");
				System.out.println("└────────────────────────┘");

				Scanner sc = new Scanner(System.in);
				System.out.println("번호를 입력해 주세요");
				System.out.println("1. 성적 입력");
				System.out.println("2. 성적 출력");
				System.out.println("3. 성적 저장");
				System.out.println("4. 성적 로드");
				System.out.println("5. 종료");
				System.out.print("번호를 입력해주세요 >");

				menu = sc.nextInt();
			}
			switch (menu) {
			case 1:
				System.out.println("┌──────────────┐");
				System.out.println("┃    성적입력    ┃");
				System.out.println("└──────────────┘");

				Scanner sc = new Scanner(System.in);

				while (true) {
					//int kor = 0;
					//int eng = 0;
					//int math = 0;
					Exam exam = new Exam();

					System.out.print("국어 성적을 입력하세요: ");
					exam.kor = sc.nextInt();
					System.out.print("영어 성적을 입력하세요: ");
					exam.eng = sc.nextInt();
					System.out.print("수학 성적을 입력하세요: ");
					exam.math = sc.nextInt();

					//exam.kor = kor;
					//exam.eng = eng;
					//exmas[index] = new Exam(); 각각 객체를 생성해줌
					//반복이 돌때마다 새객체가 만들어진다
					index++;
					System.out.println("계속하겠습니다 1번, 아니면 그외번호");
					menu = sc.nextInt();//메뉴switch문이 다시 작동된다
					if(menu==1) { //계속하겠다고하면
						continue;//컨티뉴문에 의해 성적 입력으로 다시 돌아간다
					}else {
						System.out.println("첫화면"); //성적관리로 돌아간다
						break; //while break
					}
					//계속 하쉴? 



				} //while
				break; //case1 break


			case 2:
				System.out.println("┌──────────────┐");
				System.out.println("┃    성적출력    ┃");
				System.out.println("└──────────────┘");
				for (int i = 0; i <index; i++) { 
					Exam exam = exams[i];
					int kor = exam.kor;
					int eng = exam.eng;
					int math = exam.math;
					
					System.out.printf("국어%d : %d\n",i+1,kor);
					System.out.printf("영어%d : %d\n",i+1,eng);
					System.out.printf("수학%d : %d\n",i+1,math);
				}

				System.out.println();

				break;

			}

		}

 

 

 


 

 

- 함수는 코드를 자르는 능력이 있다. 잘라서 새로운 이름을 부여

 

- 복잡한 코드에 간단한 이름을 붙여 그 간단한 이름을 따로 제어하는것

 

- 수학의 함수와 개념은 같고 쓰는 방식만 다르다

 

- 함수에서 남겨지는값 = 반환값

 

- 함수정의하는건 클래스 밑에다가 써준다

 

- 함수명 쓰고 > 반환할 계산식 return붙여서 쓰고 > 반환값의 값형식 쓰기 > 맨앞에 static붙이기

 

★★★★★★★★암기★★★★★★★★★

package ex6.fun;
public class Exam {
	
	static int sum()
	{
		return 3+4;
	}
	
	public static void main(String[] args) {
		
		int result = sum(); //7은 리턴값

	}
}

 

 

 

- 함수 응용

package ex6.fun;
public class Exam {
	
	static int sum()
	{
		return 3+4;
	}
	
	static int add(int a,int b)
	{
		return a+b;
	}
	
	static int sum(int[] nums)//매개인자로 받는다 ( ) 
	{
		int sum=0;//초기화 선언을 꼭 해줘야함
		for(int i=0; i<nums.length; i++)
			sum += nums[i]; //nums의 값을 다 더해야 하니까
			return sum;
	}
	
	public static void main(String[] args) {

		int result = sum();
		System.out.printf("sum:%d\n",result);
		
		int x = 3;
		int y = 5;
		result = add(x,y); //..add(값을 담을 변수,값을 담을 변수) add(int a,int b)
		System.out.printf("add:%d\n",result);
		
		int[] nums = {2,4,5,6};
		result = sum(nums);
		System.out.printf("nums:%d ",result);
	}
}

 

 

 

 

< Setter >

public void setKor(int kor){
	this.kor1 = kor;
}    
//위에서 매개인자로 받은 kor를 setKor객체kor1에 대입해준다

 

 

 

 

728x90