My footsteps
배열 본문
- 배열 : 값을 일괄적으로 받기 위해 필요하다 (자리바꾸기, 값 변경,집계 등등..)
- 배열 연산의 특징 : 하나의 변수명으로 여러 개의 값을 저장 할수 있음
- 배열 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]);
//~해서 출력을 배열 자체로 해주면 점수값들이 차례대로 나오게 된다.
}
'국비수업 > 수업정리' 카테고리의 다른 글
로또 배열 랜덤값 (0) | 2023.02.28 |
---|---|
웹퍼블리싱(HTML) / 2 (0) | 2023.02.25 |
switch문 (0) | 2023.02.22 |
반복문 복습 / for, while, switch문 (0) | 2023.02.21 |
비트연산자 / 복합 대입 연산자 / 연산자 우선순위 / 제어구조 (0) | 2023.02.20 |