01/10/2018, 00:05
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 ạ?
Bài liên quan
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
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 ạ?
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
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
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 ạ