Trong Java, chúng tôi có Toán lớp tĩnh. Bạn không cần phải tạo các đối tượng của nó để tĩnh của nó. Một lớp khác là lớp Random. Chúng ta không cần tạo ra các thể hiện của nó, vậy tại sao nó không phải là tĩnh? Các lớp học của tôi, tôi thường sử dụng các mẩu ngẫu nhiên và phát điên khi phải tạo ra các trường trong mỗi lớp để tạo ra các số ngẫu nhiên. Vậy tại sao nó không tĩnh?Tại sao lớp Random không tĩnh?
Trả lời
Lớp Random có trạng thái, bao gồm vị trí của nó, vì các giá trị được tạo ra không thực sự ngẫu nhiên, chỉ là một chuỗi giả ngẫu nhiên.
Điều này có thể được chứng minh bằng cách khởi tạo hai trường hợp với cùng một hạt giống.
Random a = new Random(123);
Random b = new Random(123);
for (int i = 0; i < 5; i++) {
System.out.println(a.nextInt() + "," + b.nextInt());
}
Output
-1188957731,-1188957731
1018954901,1018954901
-39088943,-39088943
1295249578,1295249578
1087885590,1087885590
Nếu bạn tạo với constructor mặc định ngẫu nhiên(), sau đó hạt giống được khởi tạo dựa trên thời gian hiện tại trong nano giây + một bộ đếm tĩnh, có nghĩa là các trường hợp khác nhau rất có khả năng có các trình tự khác nhau.
* Nếu bạn tạo với hàm tạo mặc định Random(), thì hạt giống được khởi tạo với thời gian hiện tại tính bằng mili giây * - điều này là không chính xác, việc tạo hạt ngay cả đối với mặc định 'new Random()' phức tạp hơn chỉ là 'System .currentTimeMillis() ' – bestsss
@bestsss Xin lỗi, bạn đã đúng. Tôi đã xem xét một số nguồn rất cũ cho java.util.Random (một trong những trận đấu đầu tiên trên google khó chịu). Sử dụng System.currentTimeMillis() từng là hành vi trước 1.5, nhưng bây giờ như bạn nói, phức tạp hơn nhiều. – Adam
Có, nó đã được thay đổi trong 1,5, nó đã thực sự millisec chỉ (khá lame) – bestsss
Bạn do cần tạo phiên bản, vì trình tạo số ngẫu nhiên có trạng thái là. Cụ thể, trạng thái điều khiển vị trí hiện tại trong chuỗi giả ngẫu nhiên.
Nếu bạn muốn nhiều trình tạo độc lập (không chia sẻ trạng thái), thì bạn cần các phiên bản riêng biệt.
Lý do là bạn có thể yêu cầu một số trình tạo số ngẫu nhiên độc lập. Điều này đạt được bằng cách có một số phiên bản Random
.
Đó là tất cả về hạt giống. Như bạn biết, chúng tôi không nói về các số ngẫu nhiên thực mà là giả ngẫu nhiên. Khi bạn biết số đầu tiên bạn có thể tính toán số khác. Đây là lý do tại sao chúng ta sử dụng cái gì đó được gọi là 'một hạt giống'. Mỗi đối tượng của Random
có hạt giống khác nhau. Nếu Random
sẽ tĩnh, bạn không thể có hai hạt giống khác nhau. Lưu ý rằng phương thức setSeed()
sau đó sẽ ảnh hưởng đến tất cả các trình tạo số ngẫu nhiên (và chúng tôi thường chỉ muốn thay đổi một).
- 1. Tại sao lớp System.Random không tĩnh?
- 2. C# lớp tĩnh tại sao sử dụng?
- 3. Tại sao lớp lồng nhau tĩnh?
- 4. Tại sao tôi không thể kế thừa các lớp tĩnh?
- 5. Tại sao F # không thể mở các lớp tĩnh?
- 6. Tại sao các lớp tĩnh không có destructors?
- 7. Tại sao các lớp tĩnh không có các phương thức và biến không tĩnh?
- 8. Tại sao sử dụng singleton thay vì lớp tĩnh?
- 9. Tại sao các lớp tĩnh được niêm phong?
- 10. Tại sao Android lại thích các lớp tĩnh hơn
- 11. Tại sao các lớp tĩnh được sử dụng?
- 12. Tại sao tạo một lớp chỉ với 1 hàm tĩnh?
- 13. Tại sao trong mẫu ViewHolder lớp ViewHolder nên tĩnh?
- 14. Lớp C# - Tại sao có quá nhiều phương pháp tĩnh?
- 15. Tại sao các phương thức của lớp Toán tĩnh?
- 16. Tại sao giao diện tĩnh?
- 17. Tại sao tôi không thể tham chiếu tĩnh phương thức tĩnh của lớp bên trong trên một lớp chung?
- 18. Tại sao các lớp tĩnh có thể chỉ có các thành viên tĩnh?
- 19. Tại sao toString() không thể là một phương pháp tĩnh?
- 20. Có giống nào cho Matlab Random và C++ Random không?
- 21. Tại sao Cấu trúc tĩnh không được phép trong C#?
- 22. Đối với lớp ngoài chung, tại sao tôi cần khai báo lớp lồng nhau tĩnh?
- 23. Tại sao không có khái niệm "const-correctness" cho các hàm thành viên tĩnh của lớp?
- 24. Tại sao các toán tử không thể bị quá tải bên trong một lớp tĩnh?
- 25. Python Phương pháp tĩnh, tại sao?
- 26. Tại sao phương thức tĩnh Tạo tồn tại?
- 27. Tại sao không thể loại trừ chức năng tự động lớp tĩnh của tôi trong phạm vi lớp?
- 28. Tại sao một lớp không thể mở rộng một lớp lồng nhau tĩnh xảy ra bên trong nó?
- 29. Tại sao lớp HttpUtility không được nhận dạng?
- 30. tại sao lề lớp không hoạt động?
Um, các lớp cấp cao nhất trong Java không thể được khai báo là tĩnh và bạn * cần * cần tạo các trường hợp 'Random'. Cả hai cơ sở của câu hỏi của bạn là không chính xác, về cơ bản. –
Lớp =/= phương pháp. –
Có một phép tính ngẫu nhiên tĩnh() trong môn Toán. – josefx