Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: Hàm Random cho ra kết quả trùng lặp quá nhiều

  1. #1
    Ngày gia nhập
    09 2011
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    14

    Wink Hàm Random cho ra kết quả trùng lặp quá nhiều

    Mình đang làm 1 game nhỏ, cho random vị trí quái vật, có 10 con quái mà random cả X lẫn Y( tọa độ)
    thì lần nào nó cũng chia ra làm chỉ 2 vị trí hoặc cao nhất là 3 vị trí... ngay cả đích đến của tụi nó cũng giống nhau luôn. Trong khi mình cho random min=0, max tới 800, vậy mà vẫn trùng. Ai có cách gì không giúp với
    đây là hàm của mình
    Random r = new Random();
    _Y = r.Next(0, 600);

    P/S bên C++ có thể khắc phục bằng cách chỉnh randtime thì phải, bên này có hàm nào tương tự vậy không ta

  2. #2
    Ngày gia nhập
    02 2010
    Bài viết
    28

    Trích dẫn Nguyên bản được gửi bởi bandbu Xem bài viết
    Mình đang làm 1 game nhỏ, cho random vị trí quái vật, có 10 con quái mà random cả X lẫn Y( tọa độ)
    thì lần nào nó cũng chia ra làm chỉ 2 vị trí hoặc cao nhất là 3 vị trí... ngay cả đích đến của tụi nó cũng giống nhau luôn. Trong khi mình cho random min=0, max tới 800, vậy mà vẫn trùng. Ai có cách gì không giúp với
    đây là hàm của mình
    Random r = new Random();
    _Y = r.Next(0, 600);

    P/S bên C++ có thể khắc phục bằng cách chỉnh randtime thì phải, bên này có hàm nào tương tự vậy không ta
    bạn có thể dùng Thread.Sleep(10) 10 milisecond để có nhiều giá trị khác nhau hơn vì hàm random lấy giá tri analog của cpu mà nên cho nghỉ tí sẽ có nhiều giá trí khác nhau hơn.

  3. #3
    Ngày gia nhập
    02 2011
    Nơi ở
    Bảo Lộc, Vietnam
    Bài viết
    68

    bạn có thể Random vị trí không trùng

    Code:
     
    int[] a = new int[100];
    Random b = new Random();      
               int c = 0; 
    //tạo list chứa 100 giá trị từ 1=> 100 để tí chạy Random
               List<int> list = new List<int>();
               for (int i = 1; i <101; i++)
               {
                   list.Add(i);
               }         
               //add Random giá trị từ 1 =>100 vào mảng và không trùng
               for (int i = 0; i < 100; i++)
               {               
                   c = b.Next(list.Count);
                   a[i] = list[c];
                   //sau khi add xong xóa giá trị đó trong list
                   list.RemoveAt(c);
    }

  4. #4
    Ngày gia nhập
    09 2011
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    14

    Trích dẫn Nguyên bản được gửi bởi Ryani2410 Xem bài viết
    bạn có thể dùng Thread.Sleep(10) 10 milisecond để có nhiều giá trị khác nhau hơn vì hàm random lấy giá tri analog của cpu mà nên cho nghỉ tí sẽ có nhiều giá trí khác nhau hơn.
    Cám ơn bạn nhiều cách này có vẻ hiệu quả hơn nhiều, hehe cám ơn rất nhiều, mình chỉ bổ xung xíu là nên dùng đầy đủ hơn thế này

    System.Threading.Thread.Sleep(10); trước mỗi hàm random

  5. #5
    Ngày gia nhập
    09 2011
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    14

    Trích dẫn Nguyên bản được gửi bởi lequ0ch0anglt Xem bài viết
    bạn có thể Random vị trí không trùng

    Code:
     
    int[] a = new int[100];
    Random b = new Random();      
               int c = 0; 
    //tạo list chứa 100 giá trị từ 1=> 100 để tí chạy Random
               List<int> list = new List<int>();
               for (int i = 1; i <101; i++)
               {
                   list.Add(i);
               }         
               //add Random giá trị từ 1 =>100 vào mảng và không trùng
               for (int i = 0; i < 100; i++)
               {               
                   c = b.Next(list.Count);
                   a[i] = list[c];
                   //sau khi add xong xóa giá trị đó trong list
                   list.RemoveAt(c);
    }
    hì hì, cách này hơi phiền 1 tý nhưng cám ơn bạn

  6. #6
    Ngày gia nhập
    01 2011
    Nơi ở
    Hà Nội
    Bài viết
    188

    Mặc định Hàm Random cho ra kết quả trùng lặp quá nhiều

    Game bạn làm xong chưa?
    Nếu không có vấn đề về bản quyển thì có thể cho mình xem được không?
    Chơi thử xem thế nào!

  7. #7
    Ngày gia nhập
    09 2011
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    14

    Trích dẫn Nguyên bản được gửi bởi vuthanhtrung90 Xem bài viết
    Game bạn làm xong chưa?
    Nếu không có vấn đề về bản quyển thì có thể cho mình xem được không?
    Chơi thử xem thế nào!
    hè hè, cũng sắp xong, để làm xong rồi up lên cho, bản quyền gì đâu, nó là bài tập lớn thôi

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    7

    Code:
    Random rand = new Random(Convert.ToInt32(DateTime.Now.Ticks % 0x7FFFFFFF));
    dùng như vậy thì 2 kết quả sẽ ko bao giờ trùng nhau

  9. #9
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Chắc chắn là máy của bạn, hoặc dot net trong máy bạn, có vấn đề.
    Hàm random chỉ lấy giá trị clock cho cái seed đầu tiên của nó thôi. Các cái Next sau đó dùng trị trước để làm seed.

    Code sau đây:

    Random r = new Random();
    for (int i = 1; i <= 50; i++)
    HamPrintSo(r.Next(0, 21));

    Cho ra kq sau, thấy trùng lặp đâu?

    10 19 9 17 11 2 15 18 14 16 9 17 15 19 13 0 17 12 6 13 8 8 3 15 8 20 2 1 13 13 3 6 2 16 0 20 19 9 19 13 19 14 2 4 9 17 6 19 7 2

    Chạy lại một vòng nữa, cho ra:

    19 0 9 5 7 15 18 6 7 6 16 19 9 10 1 4 1 11 12 0 13 9 17 15 17 5 14 13 15 0 16 12 10 15 13 9 13 1 4 6 11 13 17 1 12 17 8 15 1 2

  10. #10
    Ngày gia nhập
    12 2010
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi BigBigBoy Xem bài viết
    Code:
    Random rand = new Random(Convert.ToInt32(DateTime.Now.Ticks % 0x7FFFFFFF));
    dùng như vậy thì 2 kết quả sẽ ko bao giờ trùng nhau
    mình có đọc tooltips nhưng ko hiểu lắm, bạn giải thix 1 chút đc hok

Các đề tài tương tự

  1. Kỹ thuật C Tại sao hàm random cho nhiều số thì kết quả random bị trùng lặp?
    Gửi bởi acquydem12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 18-04-2014, 02:17 PM
  2. Bài tập C Nhập vào n, min, max. Sau đó Sau đó in ra random n số nằm trong khoảng [min, max] và n số này không được trùng nhau
    Gửi bởi danghoa92 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 19-10-2013, 04:02 PM
  3. Bài tập C về tạo random ko trùng
    Gửi bởi maphongba008 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-04-2013, 01:11 PM
  4. Algorithm random 10 phần tử không trùng giá trị trong C#?
    Gửi bởi 123ga trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 09-08-2012, 02:45 PM
  5. Lập trình C++ Cách sử dụng hàm random để tạo số ngẫu nhiên không trùng nhau?
    Gửi bởi reach_phan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 10-11-2011, 09:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn