Announcement

Collapse
No announcement yet.

Lỗi không chạy hết vòng lặp! :( (cũng k biết phải nói lỗi thế nào!)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C#] Lỗi không chạy hết vòng lặp! :( (cũng k biết phải nói lỗi thế nào!)

    các pro check giúp e đoạn code này cái!
    mục đích của đoạn code là chia cho số player (số player nhập từ bàn phím) mỗi người ngẫu nhiên 13 lá bài!

    đoạn code của e sao đến phần "thao tac chia bai"
    nó chỉ chia có 16 lá! ( k hiểu vì sao!

    PHP Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace 
    chiabai
    {
        class 
    Program
        
    {
            
    //tao class bai
            
    class bai
            
    {
                
    int quan;//quan: A 2 3 4 .... J Q K
                
    int loai;//loai : ♥ ♦ ♣ ♠
                //khoi tao khong tham so
                
    public bai()
                {
                    
    quan 0;
                    
    loai 0;
                }
                
    //khoi tao co tham so
                
    public bai(int aint b)
                {
                    
    quan a;
                    
    loai b;
                }
                
    //khoi tao chep
                
    public bai(bai a)
                {
                    
    quan=a.quan;
                    
    loai=a.loai;
                }
                public 
    void xuat()
                {
                    switch (
    quan)
                    {
                        case 
    1Console.Write("A"); break;
                        case 
    11Console.Write("J"); break;
                        case 
    12Console.Write("Q"); break;
                        case 
    13Console.Write("K"); break;
                        default: 
    Console.Write(quan); break;
                    }
                    switch (
    loai)
                    {
                        case 
    1Console.Write("♥"); break;
                        case 
    2Console.Write("♦"); break;
                        case 
    3Console.Write("♣"); break;
                        case 
    4Console.Write("♠"); break;
                    }
                }
            }
            static 
    void Main(string[] args)
            {
                
    bai[,] bbai;
                
    byte[,] chia;//mang nay tinh xem quan bai da duoc chia chua?
                
    chia = new byte[413];//tuong ung voi vi tri cua la bai trong bo bai
                
    bbai = new bai[413];//mang bo bai gom 52 la 4x13

                
    for (int i 04i++)
                {
                    for (
    int j 013j++)
                    {
                        
    bbai[ij] = new bai(j+1,i+1);
                        
    chia[ij] = 0;
                    }
                }

                
    int player;
                
    bai[,] pl;
                
    pl=new bai[4,13];

                
    Random ranqranl;
                
    ranq = new Random();
                
    ranl = new Random();

                
    int ql;

                do
                {
                    
    Console.Write("nhap so nguoi choi : ");
                    
    player int.Parse(Console.ReadLine());
                } while (
    player || player 4);

                
    //thao tac chia bai
                
    int ab;
                for (
    013a++)
                {
                    for (
    0playerb++)
                    {
                        
    //lay ngau nhien la bai: ngau nhien gia tri va loai bai
                        
    do
                        {
                            
    ranq.Next(013);
                            
    ranl.Next(04);
                        } while (
    chia[lq] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac

                        
    chia[lq] = 1;//quan bai da duoc chia

                        
    pl[ba] = bbai[lq];//phat cho player
                    
    }
                }

                
    //xuat bai cua cac player
                
    for (0playera++)
                {
                    
    Console.WriteLine("Nguoi choi " + (1));
                    
    Console.Write("     ");
                    for (
    013b++)
                    {
                        
    pl[ab].xuat();
                        
    Console.Write("  ");
                    }
                    
    Console.WriteLine();
                    
    Console.WriteLine();
                }



                
    Console.ReadLine();
            }
        }


  • #2
    bạn debug từng vòng xem thử

    Comment


    • #3
      PHP Code:
       for (int i 04i++) 
                  { 
                      for (
      int j 013j++) 
                      { 
                          
      bbai[ij] = new bai(j+1,i+1); 
                          
      chia[ij] = 0
                      } 
                  } 
      kết thúc vòng lặp này thì i=?,j=? bạn xem lại vòng lặp này nha
      Last edited by 09520109; 20-02-2013, 12:58.
      Hãy là chính mình!

      Comment


      • #4
        PHP Code:
        do 

        ranq.Next(013); 
        ranl.Next(04); 
        } while (
        chia[lq] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac 
        Bro xem lại chỗ này thử, em test vs player = 2, debug đến a = 8 bắt đầu có vấn đề
        Random 1 hồi mới tìm ra được lá bài chưa chia :sad:

        Comment


        • #5
          Originally posted by 12520980 View Post
          PHP Code:
          do 

          ranq.Next(013); 
          ranl.Next(04); 
          } while (
          chia[lq] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac 
          Bro xem lại chỗ này thử, em test vs player = 2, debug đến a = 8 bắt đầu có vấn đề
          Random 1 hồi mới tìm ra được lá bài chưa chia :sad:
          đó! đang thắc mắc chỗ đó mà! nói ở trên là không hiểu sao nó chỉ chia có 16 lá! với 2-3-4 player thì cũng chỉ chia 16 lá!
          mà có vấn đề là vấn đề j bạn?? nói rõ hơn được k? :-/
          Last edited by 11520104; 20-02-2013, 13:19.

          Comment


          • #6
            Originally posted by 09520109 View Post
            PHP Code:
             for (int i 04i++) 
                        { 
                            for (
            int j 013j++) 
                            { 
                                
            bbai[ij] = new bai(j+1,i+1); 
                                
            chia[ij] = 0
                            } 
                        } 
            kết thúc vòng lặp này thì i=?,j=? bạn xem lại vòng lặp này nha
            i,j bằng bao nhiêu đâu có quan trọng?? mình chỉ cần nó lúc gán giá trị cho mấy lá bài ban đầu mà! về sau k xài nó nữa!!

            Comment


            • #7
              Sao không tạo mảng 52, rồi random 1-4 thôi cho nó lẹ?

              Comment


              • #8
                Originally posted by 09520109 View Post
                PHP Code:
                 for (int i 04i++) 
                            { 
                                for (
                int j 013j++) 
                                { 
                                    
                bbai[ij] = new bai(j+1,i+1); 
                                    
                chia[ij] = 0
                                } 
                            } 
                kết thúc vòng lặp này thì i=?,j=? bạn xem lại vòng lặp này nha
                sorry nhìn nhầm khúc này
                Hãy là chính mình!

                Comment


                • #9
                  Chia thêm 1 lá => tỉ lệ random ra lá chưa chia giảm => vòng lặp lâu => thời gian tăng => đứng hình h:
                  Originally posted by 11520104 View Post
                  đó! đang thắc mắc chỗ đó mà! nói ở trên là không hiểu sao nó chỉ chia có 16 lá! với 2-3-4 player thì cũng chỉ chia 16 lá!
                  mà có vấn đề là vấn đề j bạn?? nói rõ hơn được k? :-/

                  Comment


                  • #10
                    Originally posted by 12520980 View Post
                    Chia thêm 1 lá => tỉ lệ random ra lá chưa chia giảm => vòng lặp lâu => thời gian tăng => đứng hình h:
                    máy chứ có phải người đâu???
                    nói thêm cái tỷ lệ nhá! chia ra 16 lá! ta có tỷ lệ giữa chia rồi và chưa chi là 16:36 tỷ lệ lấy bài là 36/16 tứ là hơn 2/3! mắc j đứng hình? không tin tui làm cái lấy ngẫu nhiên 1 con bất kỳ, ngẫu nhiên cho đến lúc cần con chỉ định cho bạn xem!
                    PHP Code:
                    using System;
                    using System.Collections.Generic;
                    using System.Linq;
                    using System.Text;

                    namespace 
                    ConsoleApplication2
                    {
                        class 
                    Program
                        
                    {
                            static 
                    void Main(string[] args)
                            {
                                
                    Random k;
                                
                    int d;
                                
                    = new Random();
                                for (; ; )
                                {
                                    
                    k.Next(11000);
                                    
                    Console.WriteLine(d);
                                    if (
                    == 78) break;
                                }
                                
                    Console.ReadLine();
                            }
                        }

                    đây! chương trình lấy ngẫu nhiên 1 số trong 1000 số! break ra khi đến số 78! tỷ lệ lúc này là 1/1000 nó còn tìm ra! chứ chỉ tìm 1 lá trong 52 lá bài mà đứng hình như bạn nói thì quá vô lý!

                    Comment


                    • #11
                      pjo khắc phục được lỗi là lấy ngẫu nhiên từ 0-51 (1-52) lá bài! rùi từ đó tính ra được quan bài! nhưng mà vẫn không hiểu sao nếu lấy 2 cái random thì bị!

                      Comment


                      • #12
                        là sao sếp???
                        nói rõ hơn giúp e với! (
                        Originally posted by 07520182 View Post
                        Sao không tạo mảng 52, rồi random 1-4 thôi cho nó lẹ?

                        Comment


                        • #13
                          Originally posted by 11520104 View Post
                          là sao sếp???
                          nói rõ hơn giúp e với! (
                          Tạo cái mảng 52 phần tử, từ 1 -> 13 là cơ, 14 -> 27 là rô...
                          Tạo thêm 1 mảng 4 phần tử Số lượng bài.
                          Chạy duyệt 52 phần tử này, đánh số random từ 1 -> 4 vào, nếu trúng thì cộng 1 vào cái mảng số lượng ở vị trí tương ứng, nếu số lượng quá 13 thì random lại ngay vị trí đó.

                          Rồi muốn xuất gì đó thì quét cái mảng 52 phần tử kia là được.

                          Comment


                          • #14
                            Originally posted by 07520182 View Post
                            Tạo thêm 1 mảng 4 phần tử Số lượng bài.
                            cái mảng này là sao ạh?? e chưa hình dung được! @@

                            Comment


                            • #15
                              Originally posted by 11520104 View Post
                              cái mảng này là sao ạh?? e chưa hình dung được! @@
                              Để đếm xem mỗi người đã random ra bao nhiêu bài, nếu quá 52/4=13 thì không random ra cho người đó nữa.

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X