My footsteps

배열 본문

국비수업/수업정리

배열

밀김 2023. 2. 23. 11:12
728x90

 

 

 

 

 

 

 

- 배열 : 값을 일괄적으로 받기 위해 필요하다 (자리바꾸기, 값 변경,집계 등등..)

 

- 배열 연산의 특징 : 하나의 변수명으로 여러 개의 값을 저장 할수 있음

 

- 배열 ex : new int [ 3 ] 값의 형식은 그때그때 바뀌는거고 대괄호를 씀 

([3]은, 방의 갯수라고 생각하면 되고, new는 방3개만들어! 라고 주문을 넣었다고 보면됨)

 

배열 식 예시
int [ ] kors = new int[3]; > 정수 3개가 들어갈 방을 준비함
kors[1]
> 큰 방에서 한칸 이동하라는 의미(1칸은 4바이트) 3칸(0~2)에서 1이니까 두번째방임

 

- 배열과 반복문은 뗄레야 뗄수 없는 관계

for(int i=0; i<3; i++)

kors[i]=1

 

 

ex) 영어 성적 3개를 저장하기 위한 배열 engs를 선언하시오.

int [ ] engs = new int[3];

 

 

-여러가지 연산들

kors==engs 참조하고 있는 객체가 같은 객체냐는 연산 O

kors[0] == engs[0] 정상 연산 O

int x = kors[0]; 정수변수와 모양새만 다르다 뿐이지 4바이트로 할당된 연산은 같아서 정상 O

int x = kors; 왼쪽은 정수공간이고 오른쪽은 객체이기 때문에 객체를 정수에 담는것은 불가능 하므로 X 

 

 

- 배열 초기화

정수형 변수는 자동 0으로 초기화가 되지 않는다. 반면에 배열은 0으로 자동 초기화가 되어있다.(객체는 모두 0으로 초기화 되어 있음) 

 

- int[ ]  kors= new int[ ] { 1, 2, 3}  0말고 내가 원하는 값으로 자동초기화 할수 있음. 대신, [ ]대괄호 안에 그 갯수를 쓰면 안되고 { } 중괄호에 내가 원하는 값들을 나열하면 된다. 버전이 좋아져서 int[ ] kors = {1,2,3} 이렇게만 해도 된다 

 

 

 

package ex3.control;
import java.util.Scanner;
public class Program {
	public static void main(String[] args) {
		
		boolean run = true;//첫화면 while문을 실행하기 위한 변수
		int avg=0; //성적관리에서 원하는 메뉴로 가기위한 값을 담을 변수
		
		int kor1= 0;
		int kor2= 0;
		int kor3= 0;
		//성적 점수 변수들
		
		int[] kors = new int[3]; 
		//kors라는 이름의 변수로 int형방을 마련하려고 한다.
		
		out://while문 탈출을 위한 라벨문
		while(run)//true값을 갖고있는 run변수라서, 무한히 실행 된다
		{
			Scanner scan = new Scanner(System.in);
			//사용자의 입력값을 받기 위한 스캐너
			
			System.out.println("┌────────────────────────┐");
			System.out.println("│          성적관리        │");
			System.out.println("└────────────────────────┘");
			System.out.println("1.성적입력\n2.성적 출력\n3.성적 저장\n4.성적 로드\n5.종료");
			System.out.print("입력>");
	
			avg = scan.nextInt();
			//입력한 값이 avg로 저장된다
			
			while(!(1<=avg && avg<6)) { ////메뉴인,1~5 이상이 !아니면 while문이 종료된다
				System.out.println("잘못된 입력입니다.\n다시 입력해주세요.");
				//메뉴인,1~5 이상을 입력했을때에 나오는 에러메세지
				avg = scan.nextInt();
				//정상값들을 다시 입력받기 위한..
			} 

		
		switch(avg) { //avg에 들어온 값들에 의해 실행되는 스위치문
			case 1:
				System.out.println("┌────────────────────────┐");
				System.out.println("│          성적입력        │");
				System.out.println("└────────────────────────┘");
				System.out.println("국어 성적을 입력하세요");

				for(int i=0; i<3; i++) { 
					System.out.printf("국어 %d >",i+1); //i가0부터 시작하니까 +1
					kors[i] = scan.nextInt();
					//kors라는 배열에 입력값을 넣는데, 그 입력값을 i에 저장한다
				}//점수 입력 받는 출력문이 세번 출력되게	국어1,2,3	
				//각기다른 변수에 맞게 입력값들을 저장해준다
				break;
				//각 케이스문마다 꼭 필요한 브레이크문
			case 2:	
				System.out.println("┌────────────────────────┐");
				System.out.println("│          성적출력        │");
				System.out.println("└────────────────────────┘");
				System.out.println("  국어");
				
				for(int i=0; i<3; i++) { 
					System.out.printf("국어 %d >",i+1);
					//여기까지는 카테고리 이름을 출력하는 sop
					System.out.println(kors[i]);
					//위에서 입력받은 입력값이 kors[i]에 이미 저장이 되어 있으니까,출력하는 sop
					//int[] kors = new int[3]; = kors[3] kors[i] i는 변수니까 배열안에 들어갈수 있다.
				}
				break;
			case 5:
				System.out.println("프로그램을 종료합니다 안뇨옹~");
				break out;//라벨문

}//switch		
}//while	
}//method
}//class

 

 

 

 

🔻배열에 값 넣고 출력하기🔻


 

 

 

	for(int i=0; i<3; i++) {
				System.out.printf("국어%d >",i+1);
				kors[i] = sc.nextInt();
			}//for문의 i와 kor[i]는 같은 i이다. 그런데 어떻게 서로 다른 값이 나오냐면,
			//kors[i]=sc.nextInt()의 의미는 입력값을 kors배열의 i번째 순서에 저장한다는 의미다
			//그래서 우선 for문 밑에가 sop니까, for문의 값이 차례대로 i에 넣어지면서 sop가 먼저 출력이됨
			//(for>sop흐름에서는 입력값이 아직 들어오지 않음)국어 123이 나오는거고 밑에 배열 구문으로 내려가서
			//입력받은 점수들을 kors배열의 i번째 순서에 차례대로 넣어준다. 여기서 i라는 변수는 순서대로
			//0 1 2 (총3개의방) 순서대로 넣어지게 되고 그래서 국어123 나오고,그에 맞는 점수들이 차례로 들어간다.
			break;
		case 2 : 
			System.out.println("<성적출력>");
//			System.out.print(kor1);
//			System.out.print(kor2);
//			System.out.print(kor3);
			for(int i=0; i<3; i++) {
				System.out.printf("국어%d >",i+1);
				//국어123
				System.out.println(kors[i]);
				//~해서 출력을 배열 자체로 해주면 점수값들이 차례대로 나오게 된다.
			}

 

 

 

 

 

 

 

728x90