Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Lập trình với ArrayList

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

    Mặc định Lập trình với ArrayList

    EM đang làm thì bị vướng mong các huynh chỉ giúp. Em định nghĩ class Point như sau:

    Visual C# Code:
    1. namespace Simulation.Graphics
    2. {
    3.     class Point                 //Dinh nghia Point voi 3 gia tri
    4.     {
    5.         private Int32 gt;
    6.         private Int32 x;
    7.         private Int32 y;
    8.  
    9.         public Int32 GT
    10.         {
    11.             get { return gt; }
    12.             set { gt = value; }
    13.         }
    14.  
    15.         public Int32 X
    16.         {
    17.             get { return x; }
    18.             set { x = value; }
    19.         }
    20.  
    21.         public Int32 Y
    22.         {
    23.             get { return y; }
    24.             set { y = value; }
    25.         }
    26.  
    27.        #region Contructor of this class
    28.        public Point()
    29.        {
    30.        
    31.        }
    32.  
    33.        public Point(Int32 x, Int32 y)
    34.        {
    35.            this.X = x;
    36.            this.Y = y;
    37.        }
    38.        
    39.        #endregion
    40.     }
    41. }

    Và trong chương trình chính em viết đại loại như sau:

    Simulation.Graphics.Point diem = new Simulation.Graphics.Point();

    Và sử dụng các biến như diem.X, diem.Y, diem.GT để tính toán và em lưu lại cho ArrayList như sau:

    ArrayList arrResult=new ArrayList();
    arrResult.Add(diem);


    Kết quả em chạy như sau (có vòng lặp nên chạy lập nhiều lần):

    Lần 1: arrResult.Count=1 với
    diem.X=20; diem.Y=20; diem.GT=20

    Lần 2: arrResult.Count=2 với các điểm sau
    diem.X=18; diem.Y=16; diem.GT=10
    diem.X=18; diem.Y=16; diem.GT=10

    Lần 3: arrResult.Count=3 với các điểm sau
    diem.X=18; diem.Y=16; diem.GT=10
    diem.X=18; diem.Y=16; diem.GT=10
    diem.X=18; diem.Y=16; diem.GT=10

    ...các lần sau đều tương tự. Trong khi đó em muốn kết quả như sau:

    Lần 1: arrResult.Count=1 với
    diem.X=20; diem.Y=20; diem.GT=20

    Lần 2: arrResult.Count=2 với các điểm sau
    diem.X=20; diem.Y=20; diem.GT=20
    diem.X=18; diem.Y=16; diem.GT=10

    Lần 3: arrResult.Count=3 với các điểm sau
    diem.X=20; diem.Y=20; diem.GT=20
    diem.X=18; diem.Y=16; diem.GT=10
    diem.X=16; diem.Y=12; diem.GT=5

    Em không biết có định nghĩa class Point như trên có sai hay không mà mồi lần Debug thì kết quả các phần tử trong ArrayList đều như nhau. Nó không lưu lại các giá trị trước mà thay đổi tất cả giá trị trong đó theo giá trị mới.

    Ban đầu em nghĩ là do trùng tên Point với chương trình nhưng khi em đổi tên khác thì kết quả cũng như vậy không có gì thay đổi
    Đã được chỉnh sửa lần cuối bởi sunflower : 26-03-2008 lúc 12:24 AM. Lý do: Thêm tag code

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

    Nhìn sơ qua thì thấy cậu code vậy thì không có lỗi, chỉ thiếu là trong contructor mặc định của Point nên/phải (??) gán trị default cho member variables, mặc dù có lẽ là trị default là 0 và được C# khởi tạo (dùng FxCop check thử xem sao).
    Có lẽ bug ở vòng loop của cậu, cậu add vào ArrayList chỉ 1 object chứ không phải nhiều object, nên kết quả in ra giống nhau, chỉ của 1 object.
    Post code lên cho bà con bug hunting luôn đi !!!

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

    Trích dẫn Nguyên bản được gửi bởi TQN
    Nhìn sơ qua thì thấy cậu code vậy thì không có lỗi, chỉ thiếu là trong contructor mặc định của Point nên/phải (??) gán trị default cho member variables, mặc dù có lẽ là trị default là 0 và được C# khởi tạo (dùng FxCop check thử xem sao).
    Có lẽ bug ở vòng loop của cậu, cậu add vào ArrayList chỉ 1 object chứ không phải nhiều object, nên kết quả in ra giống nhau, chỉ của 1 object.
    Post code lên cho bà con bug hunting luôn đi !!!
    Cám ơn TQN nhiều nha. Mình đã tìm ra lỗi của nó rồi. Đúng là chỉ có 1 object thôi.
    Mình đã sửa lại như sau:

    ArrayList arrResult=new ArrayList();
    arrResult.Add(new Simulation.Graphics.Point(diem.X,diem.Y,diem.GT));


    Và nó chạy ngon lành luôn. Một lần nữa cám ơn bạn đã chỉ mình tìm ra.
    Đã được chỉnh sửa lần cuối bởi minhnhutee : 30-11-2006 lúc 02:26 PM.

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

    Trích dẫn Nguyên bản được gửi bởi minhnhutee
    Cám ơn TQN nhiều nha. Mình đã tìm ra lỗi của nó rồi. Đúng là chỉ có 1 object thôi.
    Mình đã sửa lại như sau:

    ArrayList arrResult=new ArrayList();
    arrResult.Add(new Simulation.Graphics.Point(diem.X,diem.Y,diem.GT));


    Và nó chạy ngon lành luôn. Một lần nữa cám ơn bạn đã chỉ mình tìm ra.
    Cho em hỏi thêm là sau khi thực thi đoạn code trên thì em có được arrResult và em muốn lấy các giá trị trong arrResult đó để làm tính toán khác thì em viết như sau:

    Simulation.Graphics.Point tmp = new Simulation.Graphics.Point();
    tmp = arrResult[i];
    int a=tmp.X;
    int b=tmp.Y;
    int c=tmp.GT;


    Rồi nó báo lỗi như sau:
    Cannot implicitly convert type 'object' to 'Simulation.Graphics.Point'. An explicit conversion exists (are you missing a cast?)

    Các huynh chỉ giúp em với. Hình như là em ép kiểu sai thì phải...(ở hàng code màu đỏ...)
    Đã được chỉnh sửa lần cuối bởi minhnhutee : 03-12-2006 lúc 06:55 PM.

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi minhnhutee Xem bài viết
    Cho em hỏi thêm là sau khi thực thi đoạn code trên thì em có được arrResult và em muốn lấy các giá trị trong arrResult đó để làm tính toán khác thì em viết như sau:

    Simulation.Graphics.Point tmp = new Simulation.Graphics.Point();
    tmp = arrResult[i];
    int a=tmp.X;
    int b=tmp.Y;
    int c=tmp.GT;


    Rồi nó báo lỗi như sau:
    Cannot implicitly convert type 'object' to 'Simulation.Graphics.Point'. An explicit conversion exists (are you missing a cast?)

    Các huynh chỉ giúp em với. Hình như là em ép kiểu sai thì phải...(ở hàng code màu đỏ...)
    chào minhnhutee :
    Vấn đè là ở chỗ đó : tmp = arrResult[i];
    Trong C# nó coi mỗi thành phần là một object chứ không thực như người dùng định nghĩa , ở đây arrResult[i] là 1 object , còn tmp của bạn lại khai báo là kiểu point ....nên error là đúng roài
    Có lẽ bạn nên thực thi lại kiểu như sau :
    tmp = Simulation.Graphics.Point.Parse(arrResult[i]);
    mình nghĩ có khả năng là đc đó . Chúc bạn thành công !

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

  1. ADO.NET Cách đưa listview vào arraylist,từ arraylist hiển thị ra listview ai giúp giùm em?
    Gửi bởi michaelduy1989 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 24-06-2013, 11:26 AM
  2. Cách tạo report lấy dữ liệu từ Arraylist?
    Gửi bởi konanchi trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 12-04-2013, 03:38 PM
  3. Cách tạo 1 ArrayList cac Groupbox C#?
    Gửi bởi holygon trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 19-05-2012, 09:54 PM
  4. Có cách nào in Arraylist mà không cần vòng lặp không nhỉ ?
    Gửi bởi vitnhua7590 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 4
    Bài viết cuối: 24-11-2011, 02:53 PM
  5. sử dụng ArrayList
    Gửi bởi onestar trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 27-12-2008, 05:56 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