Thắc mắc về chương trình tạo mảng các số integer ngẫu nhiên

Em có một bài tập về việc tạo một mảng các số ngẫu nhiên và đếm xem có bao nhiêu số 0 trong mảng đó.
Đây là đoạn code của em:

import java.util.Random;

/**
 * Created by Danh Thai on 9/26/2016.
 */
public class OneSum {
    public static int count(long[] a){
        int count = 0;
        for(int i = 0; i < a.length; i++){
            if(a[i] == 0 ) count ++;
        }
        return count;
    }
    public static void main(String[] args){
        int n = 70;
        long a[] = new long[n];
        final  int MAX= Integer.MAX_VALUE;
        final int MIN = Integer.MIN_VALUE;
        for(int i = 0; i < a.length; i++){
            a[i] = min + (long)((Math.random() * ((max - min) + 1)));
        }
        count(a);
        System.out.println(max - min );
        System.out.println(count(a));
    }

}

LỖI: Theo em lỗi ở đây là khi đặt max và min là 2 giá trị đầu cực của kiểu int thì câu lệnh khởi tạo giá trị a[i] sẽ bị tràn bộ nhớ do max - min có giá trị vượt quá phạm vi của int. Vậy mọi người cho em hỏi có cách nào để tạo một mảng gồm các số int ngẫu nhiên trong phạm vi của integer không ạ?

Lý do là vì bị overflow khi bạn trừ max cho min
Bạn có thể sử dụng long sau đó cast ngược lại về kiểu int

Random m_random = new Random();
...
public int randomWithRange(int MIN, int MAX) {
    return (int) ((m_random.nextLong() & Long.MAX_VALUE) % (1L + max - min)) + min;
}

Vậy nếu muốn khởi tạo mảng ngẫu nhiên của một kiểu giá trị thì vẫn phải dùng đến kiểu giá trị lớn hơn ạ?

Tùy thuộc vào khoảng bạn muốn random

À vâng ý em là nếu muốn random trong toàn bộ phạm vi của kiểu thì phải dùng đến kiểu lớn hơn ạ?

1 Like

Bạn có thể random 2 lần. Từ min đến 0 rồi từ 0 đến max. Sau đó lại random 2 kết quả này. Có nhiều cách mà. Do logic của từng người nhé. Try hard :smiley:

1 Like

bạn thử dùng cái này xem
random 0 -> n
(int)(Math.random() * (n + 1));

ví dụ 20
(int)(Math.random() * (20 + 1));

Hàm này thì em có biết nhưng em muốn random ra cả số âm nữa ạ

nhân random với -1 là được cả số âm thôi

1 Like

Nếu tự ý nhân với -1 thì đâu còn là random nữa ạ. Em muốn số lượng các số âm và dương cũng mang tính ngẫu nhiên thôi ạ

Chán bạn thế nhỉ, random 2 lần, nếu được số chẵn thì là 1 số lẻ thì -1 đem nhân với số random thứ 2 thế là được số random âm đến dương, suy nghĩ linh động lên 1 tý, đừng phụ thuộc framework quá

Vâng em cảm ơn em cũng vừa nghĩ được rồi ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?