2011-03-17 2 views
0

Java를 사용하여 외부 텍스트 파일에서 처음 8 개 값을 추출하는 방법과 관련하여 먼저 question을 게시했습니다. 텍스트 파일에는 처음 1000 개의 소수가 포함되어 있으며이 텍스트 파일에서 데이터를 읽는 방법을 작성했습니다.Java가 텍스트 파일의 무작위 값 추출

을 임의로에 8 개 추출하고 다른 방법으로 결과를 적용하는 방법을 알고 싶습니다. 의 라인을 따라

뭔가 :

나는 (내 앞의 질문에 대한 답변들에 의해 설명) 처음 8 개 번호를 추출 할 수 있어요
read data from file; 
select eight random numbers from file; 
apply random numbers to method; 

그러나 지금은 팔 개 임의의 값을 추출하기 위해 찾고 있어요 어떻게해야합니까?

감사합니다.

답변

4

또 다른 방법은 다음과 같습니다이 솔루션은 다음 BalusC의 대답은 조금 더 efective 때문이다

List<Long> numbers = new ArrayList<Long>(); 
//here you create reader from your file 
while ((line = reader.readLine()) != null) { 
    numbers.add(Long.valueOf(number)); 
} 

Long[] selectedNumbers = new Long[8](); 
Random r = new Random(); 
for(int i = 0; i < selectedNumbers.length; i++){ 
    selectedNumbers[i] = numbers.get(r.nextInt(numbers.Size())); 
} 
//8 random numbers are in selectedNumbers array 

장점합니다. 배열을 대체 할 수 있습니다 List 물론

+0

둘 다 같은 효과가 있습니다. 당신은 아마 "능률적 인"말을 의미합니까? 어쩌면 백만 기록 : – BalusC

+0

@ BalusC 및 @drasto - 환상! 당신 도움을 많이 주셔서 고마워요.이게 내가 찾고 있었던 바로 그거야. 매우 감사! – MusTheDataGuy

+0

죄송합니다, 한가지 문제 -'line'에 대한 오류가 계속 발생합니다. 어떤 아이디어? – MusTheDataGuy

4

Collect 숫자입니다.

List<Long> numbers = new ArrayList<Long>(); 
// ... 
while ((line = reader.readLine()) != null) { 
    numbers.add(Long.valueOf(number)); 
} 

Shuffle 목록입니다.

Collections.shuffle(numbers); 

Grab 처음 8 개.

List<Long> eightRandomNumbers = numbers.subList(0, 8); 

전달하십시오.

someMethod(eightRandomNumbers); 
+0

고맙습니다. 목록 을 ArrayList 으로 변경하는 데 오류가 발생하지 않는지 묻는 메시지가 표시됩니다. – MusTheDataGuy

+1

정말로 소수를 double로 저장 하시겠습니까? –

+0

물론 Long.valueOf 대신에'Double.valueOf()'를 사용해야 할 것입니다. –

0

1000 개의 숫자로 본질적으로 중요하지 않지만 모든 숫자를 내부 목록에 추가 할 필요는 없습니다.

  • (효과적으로 파일의 각 행에 대해 임의
  • 의 isntance를 구성 비율 확률을 계산 (0 ~ 더블로하고 1)의 수를 "필요"기본적으로 당신이 할 것은 이것이다 , 여전히 필요한 항목의 수를 파일에 남아있는 항목의 수로 나눈 값);
  • 무작위 인스턴스 nextDouble()을 호출합니다. double이 계산 된 확률보다 작 으면 목록에 해당 숫자를 추가합니다.
  • 선택한 숫자가 임의의 순서로 필요하면 일부 답변에 표시된대로 선택한 숫자 목록에서 Collections.shuffle()을 호출하십시오.

도움이 필요한 경우 예제 코드로이 주제에 대한 기사를 작성했습니다 (how to pick a random sample from a list 참조).