프로그래밍/Java 정리

Java 5일차 -배열

윤도ri 2021. 11. 22. 21:53

>배열

:같은 자료형의 여러 변수를 나열해 놓은것

 

>배열의 선언

자료형[] 배열명 = {값1,값2,...};
자료형[] 배열명 = new 자료형[칸수]; --->각각 자료형에 맞게 초기화 됨.

ex) int[] arData = {10,5,1,17,15}; 

     arData[0] = 20; //공간의미!! (대괄호는 연산자이므로 공간이다)

만약에!! 안에있는 수를 출력하고 싶을때는 어떻게 해야할까? 

 하나하나 적어보면 arData[0] = 10   이렇게 될것이다.

                          arData[1] = 5

                          arData[2] = 1

                                 ....

-->여기서 규칙성을 볼수있다. arData[] 라는 값이 계속 반복되며 안에 index

넘버가 1씩 증가함을 알수 있다. 그래서 여기서 우리가 떠올려야 하는것은 for문이다.

         index 0부터 4까지 1씩 반복하는 반복문을 만들자.                    

          for(int i = 0; i<5; i++){

                       System.out.println(arData[i]);  }

 

 

>배열의 사용 이유

1. 여러 같은 의미의 값들을 하나의 이름과 인덱스로 관리하기 위해서(관계성)
 (예를들어 우리반 아이들 성적만 적어놔야하는데 내 나이들어가면 안됌) 
2 .다른 의미의 값들에 의미부여를 해서 하나로 관리하기 위해서
      String [] arMsg = {"김늘또" ,"자바", "꽃" ,"hello"};
                                   0        1     2       3 
         (전혀 관계는 없지만 방번호를 넣어줌으로서 규칙성을 부여할 수 있다)

 

>배열의 인덱스 번호

실제 값들이 저장되어 있는 공간이 할당되면 이름은 존재하지 않고
주소값만 존재한다. 따라서 시작 주소를 배열명 변수가 기억하고 있고 ,
주소연산(추가이동)을 통해 다음 주소로 이동한다. 시작 주소에서
연산된 정수(이동한 횟수)가 인덱스 번호가 되고 첫번쨰 방은 
배열명 변수가 가지고 있는 시작 주소에서 0번 이동해야 하므로
인덱스 번호는 0번부터 시작된다. 

 

arData라는 공간은 100번지 주소값을 갖고있으며 100번지에서 0만큼 추가이동한 곳의 값 :10

>배열의 사용

data = 10 // 공간     // =이 없으면 값!!!
syso(data); // 값
배열명[idx] = 값; // 공간
syso(배열명[idx]); //값 

 

>배열의 길이
배열명.length 

가끔 배열의 길이가 달라지는 경우가 있다. 그래서 범위를 정해줄때 length를 쓰면 유연하게 사용이 가능하다.

 

&nbsp;예제:5개의 정수를 입력하게 만들어서 출력하라

--->

1.5개의 정수를 받기 위해서 공간을 만들어준다.

2.length를 의미하는 변수를 선언해준다.

3.System불러와서 입력을 준비한다. 

4.array[0] [1] [2].. 반복되므로 for문을 만든다. 

-->index가 array의 길이 만큼 반복되며 1씩 늘어난다. 

5.안에 println을 넣으면 넣을때마다 출력이되므로 밖으로 빼서 출력문을 하나 더 만들어 주자.

 

 

 

 

>기타제어

break
continue: 다음  반복으로 넘어가기 /반복시 해야할 행위들은 함 
(while: 조건식 검사/ for: 증감식, 조건식 검사 )

 

 

ex) 1~10까지 출력하는데 4를 제외하고 싶을때 ↓

보통 if,else로 다 해결 가능함. '

ex)for문 이용하여 합계와 평균까지 구해보는 예제

 ex1) 합계 구할때( 증감연산자를 이용하자!!) 

       sum +=space1[i];

ex2) 합계와 통계 구할때

 

 

 

 

------------------------------------------------------------------------------------------

>2차원 배열

:배열 안의 배열= 행렬(ex:여러 사람들의 다양한 성적을 넣고싶을때..)

 

>2차원 배열 선언

 자료형[행][열] 배열명 = {
    {값1,값2,...},
    {값3,값4,...},
      ....};

자료형[ ][ ] 배열명 = new 자료형[행수][열수];

 

ex) int[ ][ ] arrData = {
   {10,20,30},
   {40,50,60}

   };

    int[ ][ ] arrData2 = new int[2][3];

 

-배열의 종류

정방배열 :각  행마다 열의 개수가 모두 같은 배열
비정방배열 각  행마다 열의 개수가 다른 배열(ex:첫번째는 3개였는데 두번째 행에 4개 ok)

When? (ex:한 고등학교에 각각 반의 학생들의 성적을 해야하는경우 반 학생수가 
    다르므로 비정방배열을 써야한다)

int[ ][ ]arrData3 = new int[2][ ];
arrData3[0] = new int[3];
arrData3[1] = new int[5];

 

--------------------------------------------------------------------------------------

>2중 for문(nested for문) (=둥지처럼 안에 감싸져 있다)

 

:for문 안에 for문이 있는 형태 
-->바깥쪽에 있는 for문은 다음 반복으로 넘어가기 위해서
자신 내부에 있는 수행할 문장들을 모두 마쳐야 한다. 
안쪽에 수행할 문장으로 j for문이 있으므로, 그 j  for문이 
완벽히 모두 완료되어야 i for문 입장에서 내부에 수행할 문장을
마친것이 된다.따라서 j for문이 완전히 끝나면 그제서야 i for문은
다음 반복으로 넘어가게 되고 다시 수행할 문장으로 j for문을 만나면
위의 과정을 반복하게 된다. 가장 안쪽에 있는 문장은 
(i for문 반복횟수) * (j for문 반복횟수) 만큼 수행된다. 

 

ex) 구구단 만들고 싶을때

for(int i = 0; i<9; i++){

 for(int j = 0; j<9; j++){

System.out.prinf("%d X %d = %d\n", i+1,j+1,(i+1)*(j+1)) }  }

 

ex1)별 반복적으로 나타내고 싶을때

*   

**

***

****

***** 

 

for (int i = 0; i < 5; i++) {
for (int j = 0; j < i+1; j++) {
System.out.print("*");
}
System.out.println();
}

 

>>2중 for문과 2차원 배열을 결합한 문제 

ex1) 학생수를 입력하고 학생에 따른 국어,수학,영어 성적을 입력하고 총합, 평균, 전체평균을 구하시오

 

       >>예제2

 

 

 

'프로그래밍 > Java 정리' 카테고리의 다른 글

Java 6일차 -메소드  (0) 2021.11.23
Java 4일차 -for문  (0) 2021.11.23
Java 3일차 -조건문  (0) 2021.11.19
Java 2일차 -변수  (0) 2021.11.17
Java 1일차  (1) 2021.11.16