일반 Generate random numbers (Random.java)

황제낙엽 2017.07.02 22:37 조회 수 : 839

sitelink1 http://www.javapractices.com/topic/TopicAction.do?Id=62 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  
Random.nextInt(number)함수는 0부터 number를 제외한 이하의 수치값을 반환한다

 

 

There are two principal means of generating random (really pseudo-random) numbers:

  • the Random class generates random integers, doubles, longs and so on, in various ranges.
  • the static method Math.random generates doubles between 0 (inclusive) and 1 (exclusive).

To generate random integers:

  • do not use Math.random (it produces doubles, not integers)
  • use the Random class to generate random integers between 0 and N.

To generate a series of random numbers as a unit, you need to use a single Random object - do not create a new Random object for each new random number.

Other alternatives are:

Here are some examples using Random.

Example 1 

import java.util.Random;

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {
  
  public static final void main(String... aArgs){
    log("Generating 10 random integers in range 0..99.");
    
    //note a single Random object is reused here
    Random randomGenerator = new Random();
    for (int idx = 1; idx <= 10; ++idx){
      int randomInt = randomGenerator.nextInt(100);
      log("Generated : " + randomInt);
    }
    
    log("Done.");
  }
  
  private static void log(String aMessage){
    System.out.println(aMessage);
  }
}
 


Example run of this class:

Generating 10 random integers in range 0..99.
Generated : 44
Generated : 81
Generated : 69
Generated : 31
Generated : 10
Generated : 64
Generated : 74
Generated : 57
Generated : 56
Generated : 93
Done.

Example 2

This example generates random integers in a specific range. 

import java.util.Random;

/** Generate random integers in a certain range. */
public final class RandomRange {
  
  public static final void main(String... aArgs){
    log("Generating random integers in the range 1..10.");
    
    int START = 1;
    int END = 10;
    Random random = new Random();
    for (int idx = 1; idx <= 10; ++idx){
      showRandomInteger(START, END, random);
    }
    
    log("Done.");
  }
  
  private static void showRandomInteger(int aStart, int aEnd, Random aRandom){
    if (aStart > aEnd) {
      throw new IllegalArgumentException("Start cannot exceed End.");
    }
    //get the range, casting to long to avoid overflow problems
    long range = (long)aEnd - (long)aStart + 1;
    // compute a fraction of the range, 0 <= frac < range
    long fraction = (long)(range * aRandom.nextDouble());
    int randomNumber =  (int)(fraction + aStart);    
    log("Generated : " + randomNumber);
  }
  
  private static void log(String aMessage){
    System.out.println(aMessage);
  }
} 



An example run of this class:

Generating random integers in the range 1..10.
Generated : 9
Generated : 3
Generated : 3
Generated : 9
Generated : 4
Generated : 1
Generated : 3
Generated : 9
Generated : 10
Generated : 10
Done.

Example 3

This example generates random floating point numbers in a Gaussian (normal) distribution. 

import java.util.Random;

/** 
 Generate pseudo-random floating point values, with an 
 approximately Gaussian (normal) distribution.

 Many physical measurements have an approximately Gaussian 
 distribution; this provides a way of simulating such values. 
*/
public final class RandomGaussian {
  
  public static void main(String... aArgs){
    RandomGaussian gaussian = new RandomGaussian();
    double MEAN = 100.0f; 
    double VARIANCE = 5.0f;
    for (int idx = 1; idx <= 10; ++idx){
      log("Generated : " + gaussian.getGaussian(MEAN, VARIANCE));
    }
  }
    
  private Random fRandom = new Random();
  
  private double getGaussian(double aMean, double aVariance){
    return aMean + fRandom.nextGaussian() * aVariance;
  }

  private static void log(Object aMsg){
    System.out.println(String.valueOf(aMsg));
  }
} 



An example run of this class:

Generated : 99.38221153454624
Generated : 100.95717075067498
Generated : 106.78740794978813
Generated : 105.57315286730545
Generated : 97.35077643206589
Generated : 92.56233774920052
Generated : 98.29311772993057
Generated : 102.04954815575822
Generated : 104.88458607780176
Generated : 97.11126014402141
번호 제목 글쓴이 날짜 조회 수
243 [HttpURLConnection] POST로 파라미터 넘기기 황제낙엽 2017.08.01 873
242 HttpURLConnection POST 방식 사용하기 황제낙엽 2017.08.01 798
241 Runtime 클래스를 이용한 윈도우 프로그램 실행 예제 황제낙엽 2017.08.01 413
240 JSON Util (JSON 을 다루기 위해 직접 작성한 유틸 클래스) file 황제낙엽 2017.07.10 819
239 자바 리플렉션(Java Reflection) 간단한 설명 및 사용방법 정리 file 황제낙엽 2017.07.10 498
» Generate random numbers (Random.java) 황제낙엽 2017.07.02 839
237 쓰레드(Thread)를 중간에 종료시키는 방법 황제낙엽 2017.03.15 5516
236 JSON 라이브러리(API) 종류 황제낙엽 2017.01.18 713
235 [JSON기초04] 자바 JSON 데이터에서 KEY 값 알아오기 (TIP) 황제낙엽 2017.01.18 7217
234 [JSON기초03] 자바 JSON Google Simple JSON을 이용한 간단한 JSON DATA 파싱 황제낙엽 2017.01.18 908
233 [JSON기초02] 자바 JSON Google Simple JSON을 이용한 간단한 JSON DATA 생성 황제낙엽 2017.01.18 462
232 [JSON기초01] JSON이란? XML이란? JSON 개념, XML 개념 설명 황제낙엽 2017.01.18 689
231 싱글톤 방식의 테스트용 Temporary Data Access Object 황제낙엽 2017.01.12 1920
230 SimpleDateFormat Symbol file 황제낙엽 2016.12.20 461
229 JSON-lib Java Library file 황제낙엽 2013.04.09 460
228 JSP 파일에서 getOutputStream() has already been called for this response 에러 황제낙엽 2013.04.24 11907
227 servlet 에서의 json 한글처리 황제낙엽 2013.04.23 1854
226 -file.encoding의 역할 (다국어, 한국어) 황제낙엽 2013.04.10 549
225 [The type HttpUtils is deprecated] javax.servlet.http.HttpUtils 황제낙엽 2013.03.20 569
224 com.oreilly.servlet.multipart 를 이용한 파일 업로드 file 황제낙엽 2013.03.19 443