» Nội dung :Ở bài viết này mình sẽ hướng dẫn các bạn 3 kỹ thuật random thường dùng:
1. Random tự nhiên, có thể trùng nhau.
2. Random có thể trùng nhau nhưng 2 phần tử liên tiếp không trùng nhau.
3. Random không trùng nhau.Các bạn có thể random các phần tử trong một danh sách theo cách này, ở đây mình sẽ làm trường hợp đơn giản nhất có thể ứng dụng cho những trường hợp random danh sách.
Mình sẽ thực hiện random một dãy 10 số int, xem như random index của một danh sách khoảng 100 phần tử..
Sau khi khởi tạo
Random rd= newRandom();1. Random tự nhiên, có thể trùng nhau
Bạn sẽ sử dụng
rd.nextInt(100);trong trường hợp này thì các số cho kết quả sẽ nằm từ 0-99.
2. Để random tự nhiên có thể trùng nhau nhưng hai phần tử liền kề không trùng nhau.
Đơn giản là ta dùng một biến tạm để lưu giá trị random lần trước, khi random ra một giá trị mới thì kiểm tra, nếu giá trị mới khác giá trị cũ thì sử dụng rồi biến tạm set giá trị bằng giá trị mới.
3. Random không trùng nhau.
Trong trường hợp này sử dụng một Vector, ta sẽ ứng dụng phương thức kiểm tra có chứa object hay không của vector v.contains(iNew) kết quả false thì chúng ta add thêm vào, cuối cùng ta có vector chứa các số không trùng nhau.
Demo
import java.util.Random;
import java.util.Vector;
public class HowToRandom{
/**
* @ paramargs the command line arguments
*/
public static void main(String[]args) {
Random rd= new Random();
//random 10 number bettween 100
System.out.println("random 10 number bettween 100");
for (int i=0;i< 10; i++ ) {
System.out.println("Item "+(i+1)+":"+rd.nextInt(100));
}
//random new item difference from previous random item
int iNewNumber=0,iPrevious= -1;
for (int i=0;i< 10; ) {
iNewNumber=rd.nextInt(100);
if (iNewNumber!=iPrevious){
i++ ;
iPrevious=iNewNumber;
System.out.println("Item "+(i+1)+":"+iNewNumber);
}
}
//random 10 unique number
Vector v= new Vector();
int iNew=0;
for (int i=0;i< 10 ) {
iNew=rd.nextInt(100);
if (!v.contains(iNew)){
i++ ;
v.add(iNew);
System.out.println("Item "+(i+1)+":"+iNew);
}
}
}
}