배열
설명
/효율성을 위해 사용하는것 -> 여러개의 값을 하나의 변수에 저장해서 사용하는 것이다.
(같은 타입만 저장할 수 있음 )
/참조형 타입이다. -> 변수에 값을 지정하는 것이 아니라 따로 저장.
주소를 변수에 저장 ( 기본형 타입이 아님)
/배열 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));
}
}
}
}
댓글
댓글 쓰기