2013-04-29 1 views
0

난수 생성기를 사용하여 2 차원 어레이를 생성하려고합니다. 기본적으로 각 열에는 반복되지 않는 1-50 사이의 임의의 값이 포함되어야하지만 문제는 프로그램의 동일한 행 또는 다른 행이나 열에 반복 값을 가져올 수 없습니다. 즉, 각 정수는 한 번만 표시되어야합니다. 내 객체는 링크드리스트를 통해 만들어졌고, 일단 내가 알아 내면 거기에 algorthim을 통합 할 것입니다. 그러나 당분간, 내가 한 일을 heres합니다.자바 랜덤 제네레이터 (반복 없음)

int[] array = new int[50]; 



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

     int[] grades = new int[5]; 
      for(int j=0;j<=4;j++) 
      { 

      int unique = gen.nextInt(50)+1; 


      grades[j] = unique; 
      } 
      list.add(new Student(i, grades)); 

     } 

     System.out.println(list); 

내 출력 :

Student1: 20 49 45 16 13 
Student2: 28 10 11 30 6 
Student3: 13 25 37 31 49 
Student4: 8 23 8 12 32 
Student5: 22 18 35 2 7 
Student6: 35 8 16 23 36 
Student7: 35 3 15 42 2 
Student8: 43 12 44 2 35 
Student9: 12 21 36 23 12 

그래서 내 문제는 이것이다. 어떻게 값을 반복하지 않고 임의의 gen을 구현할 수 있습니까? 일반적으로 지금은 컬렉션 목록을 시도 할 것이지만 java.util.Random을 사용하여이 작업을 수행하려고합니다. 개인적으로이 작업을 다른 방법으로 수행하지만 지시를받습니다. 당신

답변

6

감사하는 것은 여기에 내가 무엇을 할 것이라고입니다 :

숫자 1-50의 ArrayList를을 가지고, 다음 목록에 Collections.shuffle를 사용합니다.

+0

간단하고 우아한이 솔루션이 적합합니다. – nook

+0

그게 실용적인 솔루션이지만 거기에 랜덤() 생성기를 사용하여 이것을 구현하는 방법은 무엇입니까? 나는 내가 이런 식으로 지시하도록되어 있다고 확신한다. – user2188838

+0

@ user2188838 : 물론, 블라드 - ardelean이 말한대로하십시오. Collections.shuffle은 임의 생성기, btw를 사용합니다. –

0

수락하기 전에 번호가 고유한지 확인할 수 있습니다. 예를 들어 다음과 같이 시도해 볼 수 있습니다.

int count=0; 
List<Integer> list=new ArrayList<Integer>(); 
    while(count<50){ 
     int num=random.nextInt(50); 
      if(!list.contains(num)){ 
       list.add(num); 
       ++count; 
      }      
    } 
+0

그래서 기본적으로 배열 목록을 만들고 정수를 무작위로 만들고 그 정수가 이미 사용되었는지 확인하십시오. 그런 다음 50에 도달 할 때까지 각 값을 올리십시오. – user2188838

+0

네, 기본적으로 제가 제안한 것입니다. 어떤 콜렉션도 작동 할 것입니다. 이미 언급 되었기 때문에 목록을 제안했습니다. 당신의 교수가 결과를 저장할 것을 제안한 데이터 구조를 사용하고 필요하다면 (데이터 구조가 이미 가지고 있지 않다) 숫자가 존재하는지 확인하기 위해 boolean 값을 반환하는 contains 메소드를 생성합니다. –

+0

배열 목록 구현 각 줄마다 패턴을 모두 인쇄하는 것을 끝내었기 때문에 나는 그 방법을 피하기로 결정했습니다. 나는 온라인으로이 가이드를 우연히 발견했다. http://stackoverflow.com/questions/16284894/java-random-generator-without-repeat?answertab=active#tab-top 기본적으로 숫자를 생성하고 값을 추가한다고 가정한다. 그것은 이미 자리에 없습니다. 이 구현의 문제는 모든 것을 올바르게 따르더라도 (특히 임의의 변수와 객체의 변수에 대해) 기호 오류가 계속 발생한다는 것입니다. – user2188838