Home  >  Article  >  Java  >  How to generate non-repeating random numbers in java

How to generate non-repeating random numbers in java

尚
Original
2019-12-09 14:48:1413120browse

How to generate non-repeating random numbers in java

Generating random numbers in Java

1. Call the random() method in the Math class below java.lang to generate random numbers

Create a new file The file extension is java, and the file name is MyRandom. Write the following code in this class:

public class MyRandom {
public static void main(String[] args) {
int radom = (int)(Math.random()*10);
System.out.println(radom);
}
}

Among them, Math.random() //Generate a random decimal between 0 and 1.

To generate an integer between 0 and 9 is: (int)(Math.random()*10);

To generate an integer between 1 and 10 you can write: (int)(Math.random()*10 1);

And so on: to generate a number between 0 and n, it should be written as: Math.random()*n;

Get a random positive integer with a specified length:

public static int buildRandom(int length) {
int num = 1;
double random = Math.random();
if (random < 0.1) {
random = random + 0.1;
} for (int i = 0; i < length; i++) {
num = num * 10;
}
return (int) ((random * num));
}

2. Call the Random class below java.util. Instances of this class are used to generate a pseudo-random number stream and generate a random integer, then call The nextInt() method of this class
Before using the Random class, import java.util.Random under the package; the code is:

import java.util.Random;
public class MyRandom {
public static void main(String[] args) {
Random rand = new Random();
int rInt = rand.nextInt(10);
System.out.println(rInt);
}
}

where Random rand = new Random() is to create a New random number generator; rand.nextInt(int n) is a uniformly distributed int value between 0 (inclusive) and the specified value n (exclusive) taken from this random number generator's sequence.

In Java, in the specified integer range class, the loop generates different random numbers

The example of generating 6 different random integers within 20 is as follows:

public class MyRandom {
public static void main(String[] args) {
int n = 20;
Random rand = new Random();
boolean[] bool = new boolean[n];
int randInt = 0;
for(int i = 0; i < 6 ; i++) {
do {
randInt = rand.nextInt(n);
}while(bool[randInt]);
bool[randInt] = true;
System.out.println(randInt);
}
}
}

Use a Boolean variable array to store whether the number is generated. After generation, the number becomes true as the corresponding Boolean value in the table below the Boolean array. The next time the number is generated, it will enter the do...while loop again to generate numbers until a number that has not been generated before is generated.

For example: Generate an int type array with a length of 50, and insert numbers between 0-50 into it randomly, and they cannot be repeated.

The code is as follows:

public class MyRandom {
public static void main(String[] args) {
int[] intRandom = new int[50];
List mylist = new ArrayList(); //生成数据集,用来保存随即生成数,并用于判断
Random rd = new Random();
while(mylist.size() < 50) {
int num = rd.nextInt(51);
if(!mylist.contains(num)) {
mylist.add(num); //往集合里面添加数据。
}
}
for(int i = 0;i <mylist.size();i++) {
intRandom[i] = (Integer)(mylist.get(i));
}
}
}
/**
* 随机产生指定的范围不重复的集合
* @param size
* @return
*/
public static Set<Integer> generateRandomArray(int size){
Set<Integer> set = new LinkedHashSet<Integer>(); //集合是没有重复的值,LinkedHashSet是有顺序不重复集合,HashSet则为无顺序不重复集合
Integer num = size;
Integer range = size;
Random ran = new Random();
while(set.size() < num){
Integer tmp = ran.nextInt(range); //0-51之间随机选一个数
set.add(tmp);//直接加入,当有重复值时,不会往里加入,直到set的长度为52才结束
}
return set;
}

For more java knowledge, please pay attention to the java basic tutorial column.

The above is the detailed content of How to generate non-repeating random numbers in java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn