난수생성 후 중복없이 출력

2019. 5. 9. 18:27JAVA

public class delete {

 

    public static void main(String[] args) {

         

        int[] arr = new int[10];  //1차원배열 방 10개를 만듭니다.

           int ran=0;    //랜덤값을 받을 변수를 만듭니다.

           boolean cheak;    // 비교하기 위해 boolean형 변수를 만듭니다.

           Random r = new Random();    // Random형 객체를 만듭니다.

 

           for (int i=0; i<arr.length; i++) {    // 배열의 크기만큼 for문을 돌립니다.

               ran = r.nextInt(10)+1;    // nextInt(10)하면 0-9까지 나오므로  +1을 시켜 1-10까지로 만듭니다.

               cheak = true;    // i문이 돌 때마다 cheak를 true로 만듭니다.

               for (int j=0; j<i; j++) {    //if문 때문에 j를 i값만큼 돌립니다. 

                   if(arr[j] == ran) {

               // arr배열의 방은 다 비어있는 상태이고 위에서 nextInt를 해야 하나씩 들어갑니다.

               // 그러므로 i의 값만큼 배열에  들어가있는 것입니다. 

               // for문을 돌리면서  방금 받은 random값과 배열에 들어있는 값들을 비교하여 같은게 있으면

                       i--;    // i의 값을 하나 줄여 한 번 더 돌게 합니다.

                       cheak=false;    // 목적과는 다르게 같은 값이 나왔으므로 cheak를 false로 만듭니다.

                   }

               }

               if(cheak)    // 위의 if문의 조건을 만족하지 않았으면 자동으로 cheak는 true므로 실행이 됩니다.

                   arr[i] = ran;    // ran에 받은 값을 arr[i]방에 넣습니다.

           }

 

            for(int i=0; i<arr.length; i++)    //출력하기 위한 for문

               System.out.println(arr[i]);    // arr배열을 출력합니다.

 

    }

 

}