10의 길이의 배열을 만들고 거기에 1에서 10까지의 숫자를 차례로 1,2,3,4,......10 까지 넣는다. 그것을 여러번 섞어서 4.3.2.6.5.10... 처럼
랜덤의 배열로 만들어주는 것이다.
* import java.util.Arrays; 를 import 해줘야함.
* 배열을 프린트할때 쓰는것 : System.out.println( Arrays.toString(배열이름만));
내코드 :
int [] shuffle = new int [10];
for ( int i = 0 ; i < shuffle.length ; i++ ){
shuffle[i] = i+1 ;
}
System.out.println(Arrays.toString(shuffle)) ;
for ( int k = 0 ; k < shuffle.length ; k++){
int i = (int)(Math.random()*10);
int first = shuffle[0];
shuffle[k] = shuffle[i];
shuffle[i] = first ;
}
System.out.println(Arrays.toString(shuffle));
틀린이유 : 랜덤으로 뽑은 i 랜덤하게 뽑혀나오는 수는 10까지의 숫자가
겹치지 않고 랜덤으로 나오는게 아니라 , 67666 이렇게 나올수도 있다.
그래서 shuffle[k] 이렇게 해서 k 가 0부터 9까지 나오고 모든 배열에 저장을
하게 되는데 랜덤한 수가 shuffle[6] , shuffle[6] 이렇게 계속 같은수가
배열여러곳에 들어갈 수 있는 것이다.
해결책 : 그래서 서로 맞교환해주는 애가 하나는 고정되어 있는 배열의 몇번째 수이고 다른 하나는 계속 랜덤으로 뽑아주는 애가 나오게 해서
고정되어있는예를들어 shuffle[0]애에 있는 수와 계속 랜덤으로 나오는 수인
shuffle[i] 를 계속 변경해주면 shuffle[0] 도 계속변경되며 shuffle[ 0 에서 10까지의 수] 도 모두 변경이 계속해서 된다.
그런데 그때 주의할 점은 고정되어 있는 수 예를들어 shuffle[0]을 고정시키는 수로 정했을때 그 수는 다른 변수에 저장을 해서 없어지지 않도록 해줘야 한다.
shuffle[0] 즉 고정시킨 애는 배열의 랜덤번째 수로 변경이 되고 사라지기 때문에
shuffle[0]과 랜덤으로 변경된 수에 항상 shuffle[0] 이었던 애를 저장해주면
된다.
그럼 코드로 작성을 해보자.
for(int i = 0 ; i <shuffle.length ; i++){
int k = (int)(Math.random() * 10 );
int first = shuffle[0];
shuffle[0] = shuffle [k];
shuffle[k] = first;
}
System.out.println(Arrays.toString(shuffle));
//1부터 10 까지의 랜덤값 500번 생성, 각 숫자가 생성된 횟수를 출력하기
int [] num = new int[500];
for ( int i = 0 ; i < 500 ; i++ ){
int k = (int)(Math.random() * 10 ) + 1;
num[i] = k ;
}
System.out.println(Arrays.toString(num));
//num 은 500길이의 즉 0부터 499까지의 자리가 있는 배열이다.
//1부터 10 까지의 숫자가 500개가 들어있고 각각 500개중에서 1이 몇개고 2가 몇개고를 구해야함.
int [] count = new int [10];
for ( int i = 0 ; i < num.length ; i++ ){
for ( int k = 1 ; k < 11 ; k++ ) {
if (num[i] == k ){
count[k-1] ++ ;
}
}
}
System.out.println(Arrays.toString(count));
--------------------------선생님 코드는 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_));
댓글
댓글 쓰기