Math.random () 설명 백 사이에서 나는

이것은 매우 간단한 Java (아마도 모든 프로그래밍에 적용 가능) 질문입니다.

Math.random() 0과 1 사이의 숫자를 반환합니다.

0에서 100 사이의 정수를 반환하려면 다음을 수행하십시오.

(int) Math.floor(Math.random() * 101)

백과 백 사이에서 나는 할 것입니다 :

(int) Math.ceil(Math.random() * 100)

하지만 3에서 5 사이의 숫자를 얻으려면 어떻게해야합니까? 다음 진술과 같습니까?

(int) Math.random() * 5 + 3

나는 알고 nextInt()에서 java.lang.util.Random. 하지만이 작업을 수행하는 방법을 배우고 싶습니다 Math.random().



답변

int randomWithRange(int min, int max)
{
   int range = (max - min) + 1;
   return (int)(Math.random() * range) + min;
}

randomWithRange(2, 5)10 회 출력 :

5
2
3
3
2
4
4
4
5
4

범위는 포괄적이고, 즉 [2,5]이며 , 위의 예 min보다 작아야합니다 max.

편집 : 누군가가 시도하고 바보와 반대로가는 경우 minmax, 당신은 코드를 변경할 수 있습니다 :

int randomWithRange(int min, int max)
{
   int range = Math.abs(max - min) + 1;
   return (int)(Math.random() * range) + (min <= max ? min : max);
}

EDIT2 :double s에 대한 질문은 다음과 같습니다.

double randomWithRange(double min, double max)
{
   double range = (max - min);
   return (Math.random() * range) + min;
}

그리고 당신이 바보 증거를 원한다면 그것은 단지 :

double randomWithRange(double min, double max)
{
   double range = Math.abs(max - min);
   return (Math.random() * range) + (min <= max ? min : max);
}


답변

0에서 100 사이의 숫자를 생성하려면 코드는 다음과 같습니다.

(int)(Math.random() * 101);

10에서 20까지의 숫자를 생성하려면 다음을 수행하십시오.

(int)(Math.random() * 11 + 10);

일반적인 경우 :

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);

( lowerbound포함하고 upperbound배타적 인 곳).

포함 또는 제외는 upperbound선택 에 따라 다릅니다. range = (upperbound - lowerbound) + 1그때 upperbound는 포괄적이지만, range = (upperbound - lowerbound)그렇다면 upperbound독점적 이라고 가정 해 봅시다 .

예 : 3-5 사이의 정수를 원한다면 범위가 (5-3) + 1이면 5가 포함되지만 범위가 (5-3)이면 5는 배타적입니다.


답변

Random에있는 자바 클래스 java.util패키지는 목적은보다 나은 서비스를 제공 할 것이다. 그것은 몇 가지가 nextInt()정수를 반환 방법. int 인수를 취하는 것은 0에서 int 사이의 숫자를 생성하며 후자는 포함하지 않습니다.


답변

10에서 20 사이의 숫자를 생성하려면 다음을 사용할 수 있습니다. java.util.Random

int myNumber = new Random().nextInt(11) + 10


답변

다음은 경계를 받고 임의의 정수를 반환하는 방법입니다. 약간 더 진보되어 있습니다 (완전 보편적) : 경계는 양수와 음수 모두 가능 하며 최소 / 최대 경계는 어떤 순서로나 올 수 있습니다.

int myRand(int i_from, int i_to) {
  return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}

일반적으로 경계 사이의 절대 거리를 찾고 관련 임의의 값을 얻은 다음 아래쪽 경계를 기준으로 답을 이동합니다.


답변