[Java] 2차원배열

2021. 1. 19. 17:58Dev.Program/Java & Spring

728x90

======== Test.java 만들기

문제 ) 학생 이름과 점수를 출력

- 이름을 저장할 배열(names) ⇒ "홍길동", "이순신", "강감찬", "김태희", "정우성"

- 점수를 저장할 배열(score) ⇒ 80, 60, 70, 100, 90

String[] names = {"홍길동", "이순신", "강감찬", "김태희", "정우성"};
int[] score = {80, 60, 70, 100, 90};

for(int i = 0; i < names.length; i++) {
	System.out.println(names[i] + " : " + score[i] + "점");
}

> 푼 답

 

======== Ex2.java 만들기

p.151

< 2차원 배열 >

  • 1차원 배열들의 집합
    • ⇒ 행렬의 형태와 비슷한 구조
    • ⇒ 실제 데이터는 열에 해당하는 공간에 저장되며 열의 메모리 주소를 행이 관리한다. 또한, 행의 메모리 주소를 배열 변수가 관리한다.
  • 행 크기 : 배열명.length
  • 열 크기 : 배열명[행번호].length 

< 기본 문법 >

데이터타입[][] 변수명 = new 데이터타입[행크기][열크기];
변수명[행번호][열번호] = 데이터;

책 p.153 행과 열 크기 잘 알아두기(3번 그림)

- 행 크기와 열 크기를 알아야 반복문에 쓸 수 있다.

p.151, 154

 

 

======== Test2.java 만들기

문제 )

학생 5명의 3과목에 대한 점수 관리

 - 2차원 배열 score 생성

 - 데이터를 다음과 같이 초기화 한 후 출력

  • 나는 이렇게 선언했는데
int[][] score = {{100, 80, 60}, {50, 50, 50}, {80, 77, 90}, {100, 100, 100}, {60, 60, 60}};
  • 이렇게 한 번에 선언도 가능( 뒤에서 배움! )

푼 답

 

문제 2 ) 응용문제

최종 답

 

문제 ) 학생별 총점을 저장할 1차원 배열 studentTotal 생성

  • 일단은 이렇게 만들거!

  • 좌표를 먼저 찍어준다.

  • 각 학생별 점수를 1차원 배열 studentTotal 에 누적 하고
  • 1차원 배열 학생 이름과 학생별 점수를 출력할건데
  • 1차원 배열 학생 이름과 학생별 점수를 출력을 먼저 해보기! 
for(int i = 0; i < score.length; i++) {
	System.out.println(names[i] + " : " + studentTotal[i] + "점");
}
  • 1차원이기 때문에 for 문 따로 작성해줌! 위에와 별개.

최종!

  • studentTotal 에 점수 누적하기. 

마지막 문제 ) 과목별 총점을 1차원 배열 subjectTotal 에 누적

  • 이렇게 나오도록 풀기

푼 답
선생님 답안(다른 점)

 

======== Ex3.java 만들기

p.155

< 2차원 배열 선언 및 생성, 초기화까지 한 번에 수행하는 문장 >

데이터타입[][] 변수명 = {
    {"0번행 데이터1", "0번행 데이터2", ..., "0번행 데이터n"},
    {"1번행 데이터1", "1번행 데이터2", ..., "1번행 데이터n"}, 
    {"2번행 데이터1", "2번행 데이터2", ..., "2번행 데이터n"}, 
    ...
    {"m번행 데이터1", "m번행 데이터2", ..., "m번행 데이터n"} 
};

 

그냥 출력만 해보기

 

======== Test3.java 만들기

문제 ) 직접 배열 초기화 수행

이렇게 만들기
푼 답

  • print() 대신 printf() 로 System.out.printf("%2d ", arr[i][j]); 도 가능 

최종 (실행창)

 

문제 ) 중첩 for 문을 활용하여 2차원 배열에 1 ~ 25 사이의 숫자를 차례대로 저장

 

응용 문제 ) ㄹ 모양으로 숫자가 써지도록..

  • 모르게따...ㅎㅎ if 문 쓰다가 포기...

일단 수영이꺼 참조해서 푼 답
선생님 답안

처음에 if로 풀다가

for(int j = arr[i].length - 1; j >= 0 ; j--) { 

→ 이부분을 내가 틀려서 답이 안나왔던거였음.

 

⇒ for문 안에 if 문을 넣어도 상관은 없지만 for문 실행하는 동안 if 문이 계속 돌기때문에 연산횟수가 많아짐!

if 문을 밖으로 빼내면 한번만 비교하고 반복할 수 있기 때문. (이게 훨씬 더 좋은 코드)

 

======== Ex4.java 만들기

p153, 157

  • 1, 2, 3, 4, 5 차례대로 정렬할 것.
  • 우리 눈에는 5와 2를 바꾸고 계속 바꾸는 거지만 사실 5 데이터를 꺼내서 2 데이터 자리에 넣고 하는거다. 근데 5데이터를 꺼내서 2에 넣는 순간 2 데이터는 지워짐(변수에는 하나밖에 저장이 안되기때문)

⇒ 그래서 정렬에 필요한 두 데이터 간의 스위치 시, 임시로 데이터를 저장할 임시변수 필요

 

  • 이렇게 하면 1, 2, 3, 4, 5 오름차순으로 정렬가능
728x90