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

  • #16
    Originally posted by 07520182 View Post
    Để đế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.
    àh! như z thì mình đặt 2 vòng for như trên là được! :-/ vấn đề là em không hiểu sao nếu đặt trong vòng for 2 cái random thì bị lỗi như đầu! còn đổi về 1 biến random trong vòng for thì chạy ok!

    Comment


    • #17
      Theo em biết thì hàm Random dựa trên bộ đếm thời gian của máy tính nên k hẳn là Random thực sự
      Bro sữa chỗ này thử nè
      PHP Code:
      ranq = new Random(unchecked((int)DateTime.Now.Ticks));
      ranl = new Random(unchecked((int)DateTime.Now.Ticks)); 
      :kiss:

      Comment


      • #18
        Originally posted by 12520980 View Post
        Theo em biết thì hàm Random dựa trên bộ đếm thời gian của máy tính nên k hẳn là Random thực sự
        Bro sữa chỗ này thử nè
        PHP Code:
        ranq = new Random(unchecked((int)DateTime.Now.Ticks));
        ranl = new Random(unchecked((int)DateTime.Now.Ticks)); 
        :kiss:
        thanks! đúng là chuyển về như này thì chạy được!
        pjo phát sinh thêm là sắp xếp các quân bài của các player theo thứ tự tăng dần!
        code này để so sánh xem lá thứ nhất có lớn hơn lá thứ 2 không?
        PHP Code:
                static byte sosanh(bai vbai n)
                {
                    if (
        v.q() > n.q()) return 1;
                    else if (
        v.l() < n.l()) return 1;
                    else return 
        0;
                } 
        code này để hoán đổi vị trí của 2 lá bài
        PHP Code:
                static void doi(bai abai b)
                {
                    
        bai c;
                    
        = new bai(a);
                    
        = new bai(b);
                    
        = new bai(c);
                } 
        code này là thự hiện sắp xếp cho từng player
        PHP Code:
                    for (04a++)
                    {
                        for (
        013b++)
                        {
                            for (
        int c 113c++)
                            {
                                if (
        sosanh(pl[ac], pl[ab]) == 1doi(pl[ac], pl[ab]);
                            }
                        }
                    } 
        nhưng mà lúc chạy thì nó lại hiện lỗi!
        Capture.PNG
        ai biết chỉ giúp em luôn cái! (_ _!)

        Comment


        • #19
          cái hàm v(), q() của bác là thế nào vậy?

          Comment


          • #20
            Xài theo kiểu gợi ý trên kia thì có sẵn cái mảng tăng dần luôn

            Comment


            • #21
              Originally posted by 12520980 View Post
              cái hàm v(), q() của bác là thế nào vậy?
              cái đó để lấy giá trị của "quan" với "loai"! tại không muốn đặt biến public nên phải làm 2 cái hàm! mà để biến public thì cũng bị hiện lỗi như z!

              Comment


              • #22
                Bác up code lên e xem với , em đoạn này thử bác
                PHP Code:
                using System;
                using System.Collections.Generic;
                using System.Linq;
                using System.Text;
                using System.Threading.Tasks;

                namespace 
                ConsoleApplication1
                {
                    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;
                                }
                            }

                            public 
                int q()
                            {
                                return 
                quan;
                            }

                            public 
                int l()
                            {
                                return 
                loai;
                            }
                        }

                        static 
                byte sosanh(bai vbai n)
                        {
                            
                            if (
                v.q()>n.q() || (v.q()==n.q() && v.l()<n.l())) return 1;
                            else return 
                0;
                        }

                        static 
                void doi(ref bai a,ref bai b)
                        {
                            
                bai c = new bai(a);
                            
                b;
                            
                c;
                            
                        }  

                        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(11);
                                    
                chia[ij] = 0;
                                }
                            }

                            
                int player;
                            
                bai[,] pl;
                            
                pl = new bai[413];

                            
                Random ranqranl;
                            
                ranq = new Random(unchecked((int)DateTime.Now.Ticks));
                            
                ranl = new Random(unchecked((int)DateTime.Now.Ticks));

                            
                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 
                                
                }
                            }

                            for (
                0playera++)
                                for (
                013b++)
                                    for (
                int c b+113c++)
                                        if (
                sosanh(pl[ab], pl[ac]) == 1)
                                        {
                                            
                //bai d = new bai(pl[a, b]);
                                            //pl[a, b] = pl[a, c];
                                            //pl[a, c] = d;
                                            
                doi(ref pl[ab],ref pl[ac]);
                                        }

                            
                //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();
                        } 
                    }

                Comment


                • #23
                  Originally posted by 11520104 View Post
                  code này là thự hiện sắp xếp cho từng player
                  PHP Code:
                              for (04a++)
                              {
                                  for (
                  013b++)
                                  {
                                      for (
                  int c 113c++)
                                      {
                                          if (
                  sosanh(pl[ac], pl[ab]) == 1doi(pl[ac], pl[ab]);
                                      }
                                  }
                              } 
                  ai biết chỉ giúp em luôn cái! (_ _!)
                  oài! lỗi ở chỗ này đây! (_ _!) a phải nhỏ hơn player! cắm mắt cho nó <4! lúc test toàn nhập 3 với 2! nó báo lỗi!

                  Comment


                  • #24
                    Mình có một cách rất đơn giản, dễ hiểu, đó là dùng List<bai> để mô phỏng bộ bài:
                    - Đầu tiên, tạo một list có 52 lá theo thứ tự, mô phỏng bộ bài lúc ban đầu.
                    - Để mô phỏng 4 tụ bài, ta tạo ra 4 list rỗng.
                    - Lần lượt bốc từng lá bài ngẫu nhiên trong bộ bài (random từ 0 -> boBai.Count - 1), phát đều cho mỗi tụ (Remove() khỏi bộ bài, Add() vào tụ cần chia).
                    - Lặp lại việc chia bài cho đến khi bộ bài hết bài.
                    Để tiện việc so sánh các quân bài, bạn có thể cho class bai cài đặt IComparable interface. Khi đó nếu cần sort các tụ bài, ta có thể dùng hàm Sort() của List.

                    Comment


                    • #25
                      Originally posted by CH0901050 View Post
                      Mình có một cách rất đơn giản, dễ hiểu, đó là dùng List<bai> để mô phỏng bộ bài:
                      - Đầu tiên, tạo một list có 52 lá theo thứ tự, mô phỏng bộ bài lúc ban đầu.
                      - Để mô phỏng 4 tụ bài, ta tạo ra 4 list rỗng.
                      - Lần lượt bốc từng lá bài ngẫu nhiên trong bộ bài (random từ 0 -> boBai.Count - 1), phát đều cho mỗi tụ (Remove() khỏi bộ bài, Add() vào tụ cần chia).
                      - Lặp lại việc chia bài cho đến khi bộ bài hết bài.
                      Để tiện việc so sánh các quân bài, bạn có thể cho class bai cài đặt IComparable interface. Khi đó nếu cần sort các tụ bài, ta có thể dùng hàm Sort() của List.
                      y chang ý tưởng ban đầu! cơ mà vấn đề của thớt là tìm + fix lỗi cái code trong #1 chứ k phải hỏi hướng làm bài!
                      dù sao cũng thanks! mà forum mình close topic làm sao nhỉ??? :-w

                      Comment


                      • #26
                        Nếu chỉ đổi random mà chạy được thì mình không hiểu thật.

                        Nhìn vòng lặp random:
                        do
                        {
                        q = ranq.Next(0, 13);
                        l = ranl.Next(0, 4);
                        } while (chia[l, q] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac

                        Thì nếu như chia không có bài nó sẽ treo chứ sao lại được 16 lá nhỉ?
                        https://ledsieure.com - Tết rồi, mua đèn về trang trí đi

                        Comment


                        • #27
                          Originally posted by 11520104 View Post
                          y chang ý tưởng ban đầu! cơ mà vấn đề của thớt là tìm + fix lỗi cái code trong #1 chứ k phải hỏi hướng làm bài!
                          dù sao cũng thanks! mà forum mình close topic làm sao nhỉ??? :-w
                          Ý tưởng có khác đó bạn. Cấu trúc dữ liệu của bạn không có cài đặt hàm loại bỏ những lá bài đã chọn ra khỏi bộ bài mà hiện tại chỉ có khả năng đánh dấu lá bài đã chọn. Điều này dẫn đến lỗi của chương trình vì hàm random sẽ vẫn có thể rơi vào lá đã chọn.
                          Nếu cài đặt thêm 1 hàm nhỏ để remove lá bài giống như trong List thì sẽ ok.
                          Last edited by CH0901050; 22-02-2013, 10:05.

                          Comment


                          • #28
                            Originally posted by CH1101146 View Post
                            Nếu chỉ đổi random mà chạy được thì mình không hiểu thật.

                            Nhìn vòng lặp random:
                            do
                            {
                            q = ranq.Next(0, 13);
                            l = ranl.Next(0, 4);
                            } while (chia[l, q] == 1);//dieu kien: neu la bai chia roi thi lam lap lai thao tac

                            Thì nếu như chia không có bài nó sẽ treo chứ sao lại được 16 lá nhỉ?
                            lúc test thấy random 4 lá trong phỏm thứ nhất (4 trong 13 lá bài đầu) tiếp tục như z cho 3 phỏm còn lại! là 16 lá! còn vì sao lại z thì cũng k hiểu!

                            Comment

                            LHQC

                            Collapse
                            Working...
                            X