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ố 14 kết quả

Đề tài: Hiện tượng vòng for đang chạy tự dưng bị ngắt

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    14

    Mặc định Hiện tượng vòng for đang chạy tự dưng bị ngắt

    Trong 1 phương thức mình viết xảy ra tình trạng sau : vòng for đang chạy tự dưng bị ngắt vô cớ, một số đoạn sau đó ngoài vòng for cũng bị bỏ qua không thực hiện .. Và sau khi bỏ qua những đoạn này nó tiếp tục thực hiện những đoạn còn lại ..

    Mình xem xét thấy những đoạn bị bỏ qua không có đoạn nào làm ảnh hưởng cả.. Nên giờ chịu không biết phải làm sao luôn ..

    Có ai từng bị như vậy không, chỉ mình với..

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Chắc là bạn dùng try catch exception rồi ko xử lý cái exception đó.
    Is the moon rising...

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    14

    Đây là 1 đoạn trong phương thức tính thế vị để giải bài toán vận tải min cước..

    Cái vòng lặp in đậm là chỗ bị ngắt bí ẩn ..
    Sau đó nó chạy thẳng đến chỗ TinhTheViUiVj() lun :-S
    Không phải bài nào nó cũng bị, nên nghi ngờ mình sai .. nghi ngờ mình sai mà check code thì thấy ko sai .. nên .. :( ..
    Code:
            protected virtual void XayDungHeTheViUiVj()
            {
                try
                {......
                        do
                        {.....
    
                            do
                            {
                                int cotNgang = 0, cotDoc = 0;
    
                                ArrayList aLChiPhi = new ArrayList();
                                for (int i = 0; i < soTramPhat; i++)
                                {
                                    for (int j = 0; j < soTramThu; j++)
                                    {
                                        if (oCoTheDuocChonBoSung[i, j] && (!oSeKhongChonBoSung[i, j]))
                                        {
                                            aLChiPhi.Add(mangChiPhi[i, j]);
                                        }
                                    }
                                }
                                aLChiPhi.Sort(); // sort để lấy chi phí từ bé đến lớn
                                float temp = float.Parse(aLChiPhi[0].ToString());
    
                                bool chonDuocOBoSung = false;
                                for (int i = 0; i < soTramPhat; i++)
                                {
                                    for (int j = 0; j < soTramThu; j++)
                                    {
                                        if (oCoTheDuocChonBoSung[i, j] && (!oSeKhongChonBoSung[i, j]) && (mangChiPhi[i, j] == temp))
                                        {
                                            cotNgang = i;
                                            cotDoc = j;
                                            oCoHang[i, j] = true; // ô được chọn là ô bổ sung là ô có chi phí bé nhất có thể được
                                            oDuocChonBoSung[i, j] = true;
                                            soOCoHang++;
                                            MessageBox.Show("O chon " + i + " - " + j);
                                            chonDuocOBoSung = true;
                                            break;
                                        }
                                    }
                                    if (chonDuocOBoSung)
                                        break;
                                }
                                TinhTheViUiVj();
    
    .....................
    } while (!chonLaiOChonKhac); } while (soOCoHang < (soTramPhat + soTramThu - 1)); } else { } } catch (Exception ex) { MessageBox.Show("Lỗi xây dựng hệ thế vị " + ex.Message); } }

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Code này thì chả thể nào debug được ^^!
    Đúng ra thì sau vòng for nó phải chạy tiếp aLChiPhi.Sort() , kể cả có break ^^!
    Chả hiểu sao nó lại ko chạy qua đó ^^!

    @thanhlv : Mod nào nhảy vô thế ^^! BuithiHa ah ^^?
    Is the moon rising...

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Clean project, kiểm tra ngày tháng của các file source lại + của máy lại, rồi rebuild lại toàn bộ.
    Kiểm tra các setting trong Debug option.
    Không thì up code lên đâu đó để người khác debug.
    Break code nhỏ ra, đưa vào cho các hàm (dùng Refactor của VS). Giảm số vòng lặp lồng nhau lại, lồng gì 4, 5 cấp vậy.

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    14

    Mặc định Hiện tượng vòng for đang chạy tự dưng bị ngắt

    Trích dẫn Nguyên bản được gửi bởi TQN Xem bài viết
    Clean project, kiểm tra ngày tháng của các file source lại + của máy lại, rồi rebuild lại toàn bộ.
    Kiểm tra các setting trong Debug option.
    Không thì up code lên đâu đó để người khác debug.
    Break code nhỏ ra, đưa vào cho các hàm (dùng Refactor của VS). Giảm số vòng lặp lồng nhau lại, lồng gì 4, 5 cấp vậy.
    Clean rùi build lại mà vẫn vậy ..
    TQN cho hỏi cái thư mục TemPE trong obj/debug có chứa 1 file Properties.Resources.Designer.cs.dll là để làm gì vậy?.
    Cái Refactor chưa dùng bao giờ và cũng không biết dùng như nào..

    Trích dẫn Nguyên bản được gửi bởi darkan Xem bài viết
    Code này thì chả thể nào debug được ^^!
    Đúng ra thì sau vòng for nó phải chạy tiếp aLChiPhi.Sort() , kể cả có break ^^!
    Chả hiểu sao nó lại ko chạy qua đó ^^!
    . Trong tất cả các bài toán đã test, chỉ có 1 bài là bị vậy ..
    Một điều rất rõ ràng là nó đã ngắt và bỏ qua code 1 cách .. ko giải thix nổi ..
    (Hay là nó cũng có tình cảm )..

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

    Trích dẫn Nguyên bản được gửi bởi The_languages_of_C Xem bài viết
    Đây là 1 đoạn trong phương thức tính thế vị để giải bài toán vận tải min cước..

    Cái vòng lặp in đậm là chỗ bị ngắt bí ẩn ..
    Sau đó nó chạy thẳng đến chỗ TinhTheViUiVj() lun :-S
    Không phải bài nào nó cũng bị, nên nghi ngờ mình sai .. nghi ngờ mình sai mà check code thì thấy ko sai .. nên .. :( ..
    Code:
            protected virtual void XayDungHeTheViUiVj()
            {
                try
                {......
                        do
                        {.....
    
                            do
                            {
                                int cotNgang = 0, cotDoc = 0;
    
                                ArrayList aLChiPhi = new ArrayList();
                                for (int i = 0; i < soTramPhat; i++)
                                {
                                    for (int j = 0; j < soTramThu; j++)
                                    {
                                        if (oCoTheDuocChonBoSung[i, j] && (!oSeKhongChonBoSung[i, j]))
                                        {
                                            aLChiPhi.Add(mangChiPhi[i, j]);
                                        }
                                    }
                                }
                                aLChiPhi.Sort(); // sort để lấy chi phí từ bé đến lớn
                                float temp = float.Parse(aLChiPhi[0].ToString());
    
                                bool chonDuocOBoSung = false;
                                for (int i = 0; i < soTramPhat; i++)
                                {
                                    for (int j = 0; j < soTramThu; j++)
                                    {
                                        if (oCoTheDuocChonBoSung[i, j] && (!oSeKhongChonBoSung[i, j]) && (mangChiPhi[i, j] == temp))
                                        {
                                            cotNgang = i;
                                            cotDoc = j;
                                            oCoHang[i, j] = true; // ô được chọn là ô bổ sung là ô có chi phí bé nhất có thể được
                                            oDuocChonBoSung[i, j] = true;
                                            soOCoHang++;
                                            MessageBox.Show("O chon " + i + " - " + j);
                                            chonDuocOBoSung = true;
                                            break;
                                        }
                                    }
                                    if (chonDuocOBoSung)
                                        break;
                                }
                                TinhTheViUiVj();
    
    .....................
    } while (!chonLaiOChonKhac); } while (soOCoHang < (soTramPhat + soTramThu - 1)); } else { } } catch (Exception ex) { MessageBox.Show("Lỗi xây dựng hệ thế vị " + ex.Message); } }
    cái này mình nghĩ chắc tràn stack
    Time

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

    Bạn hãy thay thế giá trị i và j tại chỗ in đậm thành a và b xem có được không?

  9. #9
    Ngày gia nhập
    02 2008
    Bài viết
    66

    @darkan nói đúng đó. Về lí thì nó phải chạy tiếp nhưng sao nó không chạy mới lạ chứ.

    @nthung tràn stack thì cũng đúng nhưng mà ít thế mà nó cũng tràn được ư? Mà debug thì phải biết chứ nhỉ.

    @The_languages_of_C bạn thử xóa hai thư mục bin và obj đi rồi build lại xem thế nào nhé! Thinh thoảng do một số lí do đặc biệt mà nó sai hoài đó.

  10. #10
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu thanhlv xem lại cách nói của mình, đừng khích bác người khác như vậy.
    Vấn đề này theo tui là vấn đề hay, có thể liên quan đến debug và 1 lỗi tinh vi nào đó trong C#, nên tui mới tham gia thảo luận.
    Cậu The_languages_of_C nên upload source lên để người khác build và debug thử.

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

  1. Lập trình C Ngắt vòng lặp
    Gửi bởi tongtoanbs trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 25-11-2013, 04:30 PM
  2. Ngắt trong C khi chưa hết vòng lặp
    Gửi bởi i1020242 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 23-08-2013, 10:33 PM
  3. Kỹ thuật C++ Nhập và gán 1 kí tự trong vòng lặp sao cho khi không nhập kí tự thì vòng lặp lại chạy tiếp.
    Gửi bởi note194 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: 12-08-2013, 09:11 PM
  4. Bài tập C Tạo ra n vòng lặp con lồng vào trong rồi chạy lại từ đầu nhỉ???
    Gửi bởi itbk trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 14-11-2012, 10:32 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