Tôi muốn tạo một số ngẫu nhiên loại ngắn chính xác như có một hàm cho kiểu số nguyên gọi là Random.nextInt (134116). Làm thế nào tôi có thể đạt được nó?tạo số ngẫu nhiên ngắn trong java?
Trả lời
Không có phương pháp Random.nextShort()
, vì vậy bạn có thể sử dụng
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
+1 là bởi vì phương pháp này trả về một số lên đến số lượng quy định (không bao gồm). Xem here
Điều này sẽ tạo ra các số từ 0 đến Short.MAX_VALUE bao gồm (số âm không được yêu cầu của OP)
Và cần có dàn diễn viên. –
cảm ơn @juergend, tôi đã cập nhật câu trả lời – luketorjussen
Nhưng nếu bạn thêm 1, bạn sẽ không thể tạo 0? – Tudor
Làm thế nào về short s = (short) Random.nextInt();
? Lưu ý rằng bản phân phối kết quả có thể có độ lệch. Đặc tả Ngôn ngữ Java đảm bảo rằng điều này sẽ không dẫn đến Ngoại lệ, int sẽ bị cắt ngắn để vừa với một đoạn ngắn.
EDIT
Trên thực tế làm một thử nghiệm nhanh, phân phối kết quả dường như được phân bố đều quá.
nếu số được tạo ra lớn hơn số lượng được giữ trong một thời gian ngắn thì sao? – luketorjussen
chỉ bốn bit cuối cùng sẽ được giữ lại, nhưng nó sẽ không tạo ra tràn. – assylias
nhưng nó có làm thay đổi tính đồng nhất tinh chỉnh của các số ngẫu nhiên được tạo ra không? –
Java quần short có trong -32 768 → 32 767 khoảng.
lý do tại sao bạn sẽ không thực hiện một
Random.nextInt(65536) - 32768
và đúc kết quả vào một biến ngắn?
+1 - Tôi vừa mới viết chính xác điều đó. – Deco
Tôi đoán nó và đã viết nó cho bạn vì vậy bạn sẽ kéo dài tuổi thọ của bàn phím của bạn. –
Đơn giản chỉ cần tạo ra một int như:
short s = (short)Random.nextInt(Short.MAX_VALUE);
Các tạo int
sẽ được trong không gian giá trị của short
, vì vậy nó có thể được đúc mà không mất dữ liệu.
Điều đó sẽ tạo ra các giá trị ngắn không âm, ngoại trừ Short.MAX_VALUE –
Giải pháp hiệu quả nhất có thể sản xuất tất cả các giá trị ngắn có thể là thực hiện.
short s = (short) random.nextInt(1 << 16); // any short
short s = (short) random.nextInt(1 << 15); // any non-negative short
hoặc thậm chí nhanh hơn
class MyRandom extends Random {
public short nextShort() {
return (short) next(16); // give me just 16 bits.
}
public short nextNonNegativeShort() {
return (short) next(15); // give me just 15 bits.
}
}
short s = myRandom.nextShort();
Thực sự tốt. – assylias
bạn cần số âm? – luketorjussen
no luke Tôi không cần phủ định chỉ từ 0 đến tối đa ngắn – waqas