~ 안에 자바 프로그래밍을 하다 보면 종종 난수 생성 우리가 애플리케이션을 개발하는 동안. 많은 응용프로그램에는 다음과 같은 기능이 있습니다. 무작위로 숫자 생성 , 예를 들어 사용자를 확인하기 위해 많은 애플리케이션에서 OTP . 난수의 가장 좋은 예는 주사위입니다. 왜냐하면 우리가 그것을 던지면 1에서 6 사이의 임의의 숫자를 얻게 되기 때문입니다.
이번 편에서는 A가 무엇인지 알아보겠습니다. 난수 그리고 난수를 생성하는 방법 자바 .
난수
난수는 큰 숫자 집합을 사용하고 수학적 알고리즘을 사용하여 숫자를 선택하는 숫자입니다. 다음 두 가지 조건을 만족합니다.
- 생성된 값은 일정한 간격으로 균일하게 분포됩니다.
- 현재와 과거의 가치를 토대로 미래의 가치를 추측하는 것은 불가능합니다.
Java에서 난수 생성
Java에는 메서드와 클래스를 사용하여 난수를 생성하는 세 가지 방법이 있습니다.
- 사용하여 무작위의() 방법
- 사용하여 무작위의 수업
- 사용하여 스레드로컬랜덤 수업
- 사용하여 정수() 메소드(Java 8)
Math.random() 메서드 사용
자바 수학 클래스에는 다양한 수학 연산을 위한 다양한 메서드가 있습니다. 그 중 하나는 무작위의() 방법. 이것은 공전 Math 클래스의 메소드 우리는 그것을 직접 호출할 수 있습니다. 만 생성합니다 더블 난수를 입력하세요 0.0보다 크거나 같음 그리고 1.0 미만 . random() 메소드를 사용하기 전에, import를 해야 합니다.java.lang.Math수업.
통사론:
public static double random()
어떤 매개변수도 허용하지 않습니다. 0.0보다 크거나 같고 1.0보다 작은 의사 난수 double을 반환합니다.
변수 전역 자바스크립트
Random() 메서드를 사용하여 난수를 생성하는 프로그램을 만들어 보겠습니다.
RandomNumberExample1.java
import java.lang.Math; public class RandomNumberExample1 { public static void main(String args[]) { // Generating random numbers System.out.println('1st Random Number: ' + Math.random()); System.out.println('2nd Random Number: ' + Math.random()); System.out.println('3rd Random Number: ' + Math.random()); System.out.println('4th Random Number: ' + Math.random()); } }
산출:
1st Random Number: 0.17434160924512265 2nd Random Number: 0.4297410090709448 3rd Random Number: 0.4828656381344487 4th Random Number: 0.13267917059488898
기억하다: 프로그램을 실행할 때마다 다른 결과가 나옵니다. 출력은 위에 표시된 출력과 다를 수 있습니다.
지정된 범위 사이에서 난수를 생성하려는 경우 다음 공식을 사용할 수도 있습니다.
Math.random() * (max - min + 1) + min
위 공식에서 최소값은 포함되고 최대값은 제외됩니다.
200에서 400 사이의 난수를 생성하는 프로그램을 만들어 보겠습니다.
RandomNumberExample2.java
public class RandomNumberExample2 { public static void main( String args[] ) { int min = 200; int max = 400; //Generate random double value from 200 to 400 System.out.println('Random value of type double between '+min+' to '+max+ ':'); double a = Math.random()*(max-min+1)+min; System.out.println(a); //Generate random int value from 200 to 400 System.out.println('Random value of type int between '+min+' to '+max+ ':'); int b = (int)(Math.random()*(max-min+1)+min); System.out.println(b); } }
출력 1:
Random value of type double between 200 to 400: 233.88329802655377 Random value of type int between 200 to 400: 329
출력 2:
날짜 형식.형식 자바
Random value of type double between 200 to 400: 254.8419979875385 Random value of type int between 200 to 400: 284
무작위 클래스 사용
난수를 생성하는 또 다른 방법은 자바 무작위의 수업 ~의java.util패키지. 의사난수 스트림을 생성합니다. 정수, 부동, 이중, 부울, 긴 등 모든 데이터 유형의 난수를 생성할 수 있습니다. 이 클래스를 사용하여 난수를 생성하려면 아래 단계를 따르십시오.
- 먼저 클래스를 가져옵니다.java.lang.Random.
- 만들기 물체 Random 클래스 중 하나입니다.
- 다음 방법 중 하나를 호출합니다.
위의 모든 메서드는 이 난수 생성기 시퀀스에서 다음 의사 난수, 균일하게 분포된 값(해당 메서드)을 반환합니다. 그만큼 다음더블() 그리고 다음플로트() 메서드는 0.0에서 1.0 사이의 임의의 값을 생성합니다.
그만큼 nextInt(int 바운드) 메소드는 양수여야 하는 매개변수 경계(상한)를 허용합니다. 0~bound-1 범위의 난수를 생성합니다.
Random 클래스를 사용하여 난수를 생성하는 프로그램을 만들어 보겠습니다.
이름 규칙 자바
RandomNumberExample3.java
import java.util.Random; public class RandomNumberExample3 { public static void main(String args[]) { // creating an object of Random class Random random = new Random(); // Generates random integers 0 to 49 int x = random.nextInt(50); // Generates random integers 0 to 999 int y = random.nextInt(1000); // Prints random integer values System.out.println('Randomly Generated Integers Values'); System.out.println(x); System.out.println(y); // Generates Random doubles values double a = random.nextDouble(); double b = random.nextDouble(); // Prints random double values System.out.println('Randomly Generated Double Values'); System.out.println(a); System.out.println(b); // Generates Random float values float f=random.nextFloat(); float i=random.nextFloat(); // Prints random float values System.out.println('Randomly Generated Float Values'); System.out.println(f); System.out.println(i); // Generates Random Long values long p = random.nextLong(); long q = random.nextLong(); // Prints random long values System.out.println('Randomly Generated Long Values'); System.out.println(p); System.out.println(q); // Generates Random boolean values boolean m=random.nextBoolean(); boolean n=random.nextBoolean(); // Prints random boolean values System.out.println('Randomly Generated Boolean Values'); System.out.println(m); System.out.println(n); } }
산출:
Randomly Generated Integers Values 23 767 Randomly Generated Double Values 0.37823814494212016 0.998058172671956 Randomly Generated Float Values 0.87804186 0.93880254 Randomly Generated Long Values -4974823544291679198 3650240138416076693 Randomly Generated Boolean Values false true
ThreadLocalRandom 클래스 사용
그만큼 스레드로컬랜덤 클래스는 다음에 정의되어 있습니다.java.util.concurrent패키지. Math 클래스의 무작위 생성기와 동일하게 내부적으로 생성된 시드로 초기화됩니다. 수정할 수 없습니다. 이 클래스를 다음과 같은 방법으로 사용할 수 있습니다.
ThreadLocalRandom.current().nextX(...)
여기서 X는 Int, Long 등입니다.
참고: 실수로 ThreadLocalRandom을 여러 스레드와 공유하는 것은 불가능합니다.
정수, 부동, 이중, 부울, 긴 등 모든 데이터 유형의 난수를 생성할 수 있습니다. 이 클래스를 사용하여 난수를 생성하려면 아래 단계를 따르십시오.
- 먼저 다음을 사용하여 클래스를 가져옵니다.java.util.concurrent.ThreadLocalRandom.
- 숫자를 무작위로 생성하려는 해당 메서드를 호출합니다.
위의 모든 메서드는 Random 클래스의 해당 메서드를 재정의하고 해당 값을 반환합니다.
위의 메소드는 매개변수를 구문 분석합니다. 경계 (위) 그래야만 해 긍정적인 . 0(포함)과 지정된 범위(제외) 사이에서 무작위로 생성된 해당 값을 반환합니다. 그것은 던진다 불법인수Excetion 경계가 음수인 경우.
위의 방법은 두 개의 매개변수를 구문 분석합니다. 기원 그리고 경계 . 원산지는 다음을 지정합니다. 최소값 반환되었으며 경계는 다음을 지정합니다. 상한 . 지정된 원점(포함)과 경계(제외) 사이에서 무작위로 생성된 해당 값을 반환합니다. 또한 던진다. 불법인수Excetion 원점이 경계보다 크거나 같은 경우.
다음을 사용하여 난수를 생성하는 프로그램을 만들어 보겠습니다. ThreadLocalRandom 클래스 .
RandomNumberExample4.java
import java.util.concurrent.ThreadLocalRandom; public class RandomNumberExample4 { public static void main(String args[]) { // Generate random integers between 0 to 999 int a = ThreadLocalRandom.current().nextInt(); int b = ThreadLocalRandom.current().nextInt(); // Print random integer values System.out.println('Randomly Generated Integer Values:'); System.out.println(a); System.out.println(b); // Generate Random double values double c = ThreadLocalRandom.current().nextDouble(); double d = ThreadLocalRandom.current().nextDouble(); // Print random doubles System.out.println('Randomly Generated Double Values:'); System.out.println(c); System.out.println(d); // Generate random boolean values boolean e = ThreadLocalRandom.current().nextBoolean(); boolean f = ThreadLocalRandom.current().nextBoolean(); // Print random Booleans System.out.println('Randomly Generated Boolean Values:'); System.out.println(e); System.out.println(f); } }
출력 1:
Randomly Generated Integer Values: 348534891 -1887936727 Randomly Generated Double Values: 0.15644440033119833 0.5242730752133399 Randomly Generated Boolean Values: true true
출력 2:
Output 2: Randomly Generated Integer Values: 402755574 295398333 Randomly Generated Double Values: 0.4856461791062565 0.5148677091077654 Randomly Generated Boolean Values: false true
마찬가지로, 우리는 다른 방법을 사용할 수 있습니다 ThreadLocalRandom클래스 .
자바 형식 문자열
Java 8의 난수 생성
Java 8에서는 새로운 메소드 ints()가 추가되었습니다. 무작위 수업 . 우리는java.util.Random방법을 사용하기 전에.
정수():
의사 난수 int 값은 nextInt() 메서드를 호출하는 것과 동일하게 생성됩니다. 의사 난수 int 값의 무제한 스트림을 반환합니다.
정수(긴 스트림 크기):
이 메서드는 매개변수를 구문 분석합니다. 스트림 크기 긴 타입이다. 생성할 값의 수를 지정합니다. 의사 난수 int 값은 nextInt() 메서드를 호출하는 것과 동일하게 생성됩니다. 또한 무작위로 생성된 int 값의 스트림을 반환합니다. 그것은 던진다 IllegalArgumentException 스트림 크기가 0보다 작은 경우.
ints(long streamSize, intrandomNumberOrigin, intrandomNumberBound):
매개변수:
지정된 원점과 경계를 갖는 의사 난수 int 값의 스트림을 반환합니다. 그것은 던진다 IllegalArgumentException 만약에:
- 스트램크기<0< li>
- 원점 > = 경계 0<>
ints(int randomNumberOrigin, int randomNumberBound):
매개변수:
지정된 원점과 경계를 사용하여 의사 난수 int 값의 무제한 스트림을 반환합니다. 그것은 던진다 IllegalArgumentException 원점이 경계보다 크거나 같은 경우.
치란지비 배우
마찬가지로, 다음을 사용하여 long 및 double 유형의 스트림을 생성할 수도 있습니다. 오랫동안() 그리고 더블스() 방법은 각각.
다음을 사용하여 정수 스트림을 생성하는 프로그램을 만들어 보겠습니다. 정수() Random 클래스의 메소드
RandomNumberExample5.java
import java.util.Random; public class RandomNumberExample5 { public static void main(String[] args) { randomInts(5); randomInts(9, 50, 90); //getStreamOfRandomInts(30, 50); } //method that generates a stream of integers having size 5 public static void randomInts(int num) { Random random = new Random(); random.ints(num).forEach(System.out::println); } //method that generates a stream of 9 integers between 50 to 90 public static void randomInts(int num, int origin, int bound) { Random random1 = new Random(); random1.ints(num, origin, bound).forEach(System.out::println); } }
출력 1:
727900357 -1073118456 306279822 370327182 1366265119 65 75 75 88 76 75 56 86 85
출력 2:
-1338107947 -1698771421 594232770 -1224937976 -1625069815 56 69 67 87 64 52 72 75 76