Em muốn random 1 mảng để đưa ra kết quả mỗi lần random đều là số khác những số trước trong mảng .
Ac cho e ý tưởng với ạ. E cảm ơn ạ.
Random luôn cho ra số khác nhau
Random ra 1 số, lấy số đó check xem đã tồn tại trong mảng chưa, nếu chưa tồn tại thì lấy, tồn tại rồi thì random ra số khác.
4 Likes
cách của mình thì mỗi lần thêm vào mảng không phải check lại mảng nữa (vì có trường hợp mảng lớn). Bạn có thể tạo ban đầu một số, các số sau sẽ bằng số trước đó cộng với 1 số random, thì sẽ không phải check lại mảng. Kiểu như:
n0 = 3;
n1 = n0 + random(1, 10);
n2 = n1 + random(1, 10);
...
4 Likes
shuffle cái mảng n phần tử rồi lấy ra k phần tử đầu tiên là được.
còn nếu n quá lớn ko tạo mảng n phần tử được thì xài https://en.wikipedia.org/wiki/Reservoir_sampling
7 Likes
Hàm này sẽ in liên tục các số không giống nhau
public static void random() {
Set<Integer> set = new HashSet<>();
while (true) {
int n = ThreadLocalRandom.current().nextInt();
if (!set.add(n)) {
System.out.println(n);
}
}
}
3 Likes
E cảm ơn ac đã cho e lời khuyên ạ. E sẽ code thử ạ