+9월 7일 자바 수업 내용 정리 - 배열 array

배열


설명
/효율성을 위해 사용하는것 -> 여러개의 값을 하나의 변수에 저장해서 사용하는 것이다. 
(같은 타입만 저장할 수 있음 ) 
/참조형 타입이다. -> 변수에 값을 지정하는 것이 아니라 따로 저장. 
                           주소를 변수에 저장 ( 기본형 타입이 아님) 
/배열 10/ 20/ 30/ 40 을 저장 -> 저장된 공간에 붙어서 저장이 된다. 
                                      -> 첫번째 있는 10 주소가 100번지면 -> 2번쨰는 101번지, 
                                        3번째는 103 번지 이렇게 붙어있다. 
/첫번째 주소만 저장을 해놓음 100번이라고, 그러면 그 주소를 찾아가면 주소를 쉽게 알수있다.
여러개의 값을 변수하나로 사용 
그 변수를 불렀을때 주소에서 어떤 값 의미하는지 모름 따라서 INDEX 라는 것을 사용한다. 
변수의 이름 : a[0] -> a라는 변수를 따라가서 `그 주소에서 0번째 있는 값이다. 
인덱스는 숫자가 0부터 시작하기 때문에 첫번째가 0번째이다. 
0,1,2,3,4,5.....
한번 만들어지면 길이를 변경 할 수 없다. 

10개짜리 공간을 만들어서 -> 얘를 변수로 사용한다. -> 부족해서 -> 공간이 더 필요해도
길이변경을 못한다 -> 
10개짜리 주소의 변수를 만들고 싶은데 메모리에 10개가 비어있는 곳에 우겨 넣었기 떄문에
그 주위에는 다른 데이터들이 자리를 차지하고 있기 때문이다. 


-인덱스로 값을 구분한다. -길이를 변경할 수 없다. 

/ 방법 


1.. 배열을 저장할 수 있는 변수 

 1)int[] array;  ( 배열의 주소를 저장할 공간이 만들어진다. 즉 선언이 된것 ) 
 2)array = new int[5] ( 배열이 생성되고 그 주소가 저장된다. --> int 5개를 저장, 그 주소가 변수. int 이고 초기는 int의 초기기본값이 0이기 때문에 맨처음 선언하면 여기에 0이 5개가 저장된다. ) 

// array 에 저장된거 (5개의 크기를 저장한것)
// new라는 예약어 ( 몇개의 값을 저장할 것인지 ) 
// 배열 초기화시 기본값(int의 경우에는 0이다. ) 이 저장된다. 
//숫자인 타입은 다 기본값이 0이라고 생각해도 된다. 
//boolean은 false가 기본값
// char 도 기본값이 0이라고 볼 수 있다. ' ' 공백이 기본값이다. 컴퓨터는 숫자 하나하나랑 문자하나하나를 매치한다. (unicode 표 ) 

// 참조형 타입의 경우 (배열, String ) 기본값이 NULL이다. 

// 4바이트 (참조형 타입은 4바이트 크기로 만들어진다. ) 


2.. array = new int[] { 1, 2, 3, 4, 5 } ;
// 중괄호 -> 실제로 넣고 싶은 값을 차례로 . 초기화할때부터 값을 넣고 초기화를  할 수 있다.


3. int[] array = { 1, 2, 3, 4, 5} ; 



배열에 접근해보기 

System.out.println(array[0]) ; // 0번 인덱스의 자리에 있는 array 출력해주기
System.out.println(array[1]);  // 1번 인덱스의 자리에 있는 array 출력해주기
System.out.println(array[2]);   // 2번 인덱스의 자리에 있는 array 출력해주기 
System.out.println(array[3]);
System.out.println(array[4]); 


각각의 index에 새로운 값을 저장해보기 


array[0] = 10; 
array[1] = 20; 
array[2] = 30; 
array[3] = 40; 
array[4] = 50; 

// 배열은 주로 반복문과 사용한다. 


int sum = 0; 
for ( int i = 0; i < array.length; i++){ 
     sum += array[i] 

   // .length 는 배열의 길이를 나타내주는 하나의 변수 -> length 는 5개라도( 길이라도 ) 
array의 수는 .length의 수보다 작다 array[]는 array [0],  array [1],  array [2],  array [3]  array [4] 이렇게 있지만, length 는 5개다. i는 0부터 시작하기 때문에 항상 .length 보다 1개 작을 수 밖에 없다. 그래서 부등호의 방향이 < 이다. 
System.out.println("합계: " + sum ); 


//단축기 
자동완성 : ctrl + spacebar 
한줄복사 : ctrl + alt + 방향기
한줄삭제 : ctrl + d 
한줄이동 : alt + 방향키 


EX) 10개의 정수를 저장할 수 있는 배열을 선언 및 초기화 해주세요. 

첫번째 int [] array; 
array = new int [10];

(다른식으로 표현 : int [] arrays = new int [10]; 


두번째 
int [] array = { 1,2,3,4,5,6,7,8,9,10};
세번째
array = new int [] { 1,2,3,4,5,6,7,8,9,10} ; 


                                                                                                                                                                                                                                                                                                                                                                                                           
EX) 배열의 모든 인덱스에 1~ 100 사이의 랜덤한 값을 저장해 주세요. 


int [] arrays; 
arrays = new int[10];

for ( int i = 0; i < arrays.length ; i++ ){
     arrays[i] = (int)(Math.random() * 100 ) + 1;

     System.out.prinln ( arrays[i] + "    " );

       }







EX) 지정된 값의 모든 합계를 구하고 평균 구하기 

 sum = 0; 
for (int k = 0; k < arrays.length ; k++){
        sum += arrays(k) ; 
}
double arg = (double) sum / arrays.length; 
System.out.println("합계 : " + sum + "  평균 :  " + arg ); 



EX) 배열에 저장된 값들 중 최솟값과 최대값을 출력하시오 


먼저할것 : 최대값과 최솟값을 정의내려준다 max min 


//최댓값
int max = arrays[0]; 
for ( int i_ = 1 ; i_ < arrays.length ; i_++ ){
      if ( max < arrays[i_] ){
     max = arrays[i_] ;
    }

}
System.out.println( " 최댓값은 : " + max + " 이다 " )



//최솟값


int min = arrays[0] 
for ( int i = 1 ; i < arrays.length ; i++ ){
    if ( min > arrays[i] ){
         min = arrays[i] ;
}     

}

System.out.println( "최솟값은 : "  + min ) ; 

 



//최댓값, 최솟값 선생님 코드 

int min = arrays[0];
int max= arrays[0]; 

for(int i = 0 ; i < arr.length; i++){
    if(arrays[i] < min) { 
       min = arrays[i] ;
        }
    if(max < arrays[i] { 
         max = arrays[i]; 
      } 
}

System.out.println( "min : " + min + " 입니다. " + "max : " + max + "입니다.")




}
}


EX) 배열의 값을 섞어주세요 




* import java.util.Arrays; 를 넣어줘야 작동함.
                                                                                                          
int [] shuffle = new int[10];

for ( int i = 0 ; i < shuffle.length; i++){

shuffle[i] = i + 1 ;
}



System.out.println(Arrays.toString(shuffle));
ㅊ   
값 [1,2,3,4,5,6,7,8,9,10] 


랜덤한 index 

for (int i = 0 ; i < shuffle.length ; i++ ) { 
     int random = (int)(Math.random() * shuffle.length);
     int temp = shuffle[0];    //0번 인덱스의 값을 보관해야해. 
     shuffle[0] = shuffle[random];   
     shuffle[random] = temp; 
}

System.out.println(Arrays.toString(shuffle)); 


위에를 내식대로 분석해서 이해하기 


import java.util.Arrays 를 넣어주어야 한다. 

int[] shuffle = new int[10] ;      shuffle 이라는 변수를 int로 선언, 10자리를 가지게초기화
for(int i = 0 ; i < shuffle.length ; i++) {     

shuffle[i] = i + 1              i =0에서 9까지 (10자리배열이니까) 그안에 저장된값은 1부터 10                                             까지

System.out.println(Arrays.toString(shuffle)); 위에서 for로인해 반복해서 10자리 함수에 각각의 숫자를 넣어준 것을 shuffle [  ] 요 모양으로 출력해줌 
 

그다음 해야하는 것이 0에서 9까지자리를 갖는 1에서 10까지의 저장된 수를 자리를 무작위로 바꿔주기 

for ( int i = 0 ; i < shuffle.length ; i++ ){  여기서의 for문은 그냥 자리를 무작위로 변경해주는 것에 영향을 미치는 것으로 for문의 괄호안에 i가 나오지 않고 그냥 조건식이 만족할때까지 그냥 반복만 해주면 됨 

int random = (int)(Math.random()*shuffle.length) ; 

여기서 가리키는 random은 shuffle[] 여기 괄호에 들어갈 애로 랜덤으로 0에서부터 9까지의 숫자중에서 뽑히게 했다. 왜냐하면 []에 들어갈 수 있는수는 shuffle의 길이가 10이기 때문에 0에서 9까지 이기 때문에 

int firs = shuffle[0] ;

shuffle[0]의 값은 shuffle[random] 으로 변경될것이므로 변경된후에 shuffle[0] 값이 변하니까 그 전에 초기에 있던 값을 저장해놓고 쓰려고 한다. 

shuffle[0] = shuffle[random]; 

shuffle[0]의 값에 랜덤으로 뽑힌 값으로 만들어진 랜덤번째 자리의 수를 넣는다. 

shuffle[random] = firs ; 
}
shuffle[random] 값이 shuffle[0] 값에 갔으므로 없는 랜덤을 채워주기 위해 shuffle[0]에 있던 애를 넣어준다. 서로 교환해주는 것 

이것이 끝나면 또 다시 i가 0에서 9가 될때까지 계속 반복해주다 끝나면 shuffle은 랜덤으로 정렬이 된다

다 끝나면 

System.out.println(Arrays.toString(shuffle)); 

만들어진 shuffle은 10자리수이고 각각의 수가 1에서 10까지의 수들로 랜덤 배열을 이루고 있겠다. 
그것을 프린트해주면 됨





EX) 1 ~ 10 까지의 랜덤값을 500번 생성하고, 각 숫자가 생성된 횟수를 출력해주세요.  
int [] count = new int [10];

for (int i = 0; i < 500 ; i++ ) {
     int ran = (int)(Math.random()*10 ) + 1; 
    count[ran -1 ]++; 
}
System.out.println(Arrays.toString(count));


}



}
}

댓글