Tầm quan trọng của việc chuyển kiểu dữ liệu trong lập trình

Tầm quan trọng của việc chuyển kiểu dữ liệu trong lập trình

Qua bài thi vừa qua có nhiều bạn sai về vấn đề chuyển kiểu dữ liệu.  Xem ví dụ cũng là 1 phần đề thi như sau:

Xét chương trình sắp xếp danh sách các số trong 1 listbox như sau

ggggggg.jpg

Một phần lớn viết chương trình như  sau. Với chương trình này, biểu thức so sánh

If Lst.Items(i) > Lst.Items(j) Then

không ép kiểu, nên việc so sánh chỉ đúng về sắp xếp chuỗi (tức là chuỗi 22<3)

Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort.Click
For i As Integer = 0 To Lst.Items.Count – 2
For j As Integer = i + 1 To Lst.Items.Count – 1
If Lst.Items(i) > Lst.Items(j) Then
swap(i, j)
End If
Next
Next
End Sub
Sub swap(ByVal i As Integer, ByVal j As Integer)
Dim tam As Integer = CInt(Lst.Items(i))
Lst.Items(i) = CInt(Lst.Items(j))
Lst.Items(j) = tam
End Sub

Với chương trình này, trong 1 số trường hợp nhập dữ liệu, kết quả chạy sai như sau:

ggggggg1.jpg

========================================

Để sửa sai, chúng ta  phải ép kiểu khi so sánh

Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSort.Click
For i As Integer = 0 To Lst.Items.Count – 2
For j As Integer = i + 1 To Lst.Items.Count – 1
If CINT( Lst.Items(i)) > CINT( Lst.Items(j) ) Then
swap(i, j)
End If
Next
Next
End Sub

Chú ý rằng hàm Swap cũng ép kiểu. Không nên sử dụng chế độ tự động chuyển kiểu của VB.NET

Sub swap(ByVal i As Integer, ByVal j As Integer)
Dim tam As Integer = CInt(Lst.Items(i))
Lst.Items(i) = CInt(Lst.Items(j))
Lst.Items(j) = tam
End Sub

Và kết quả đúng như sau.

gggggg2.jpg

Advertisements

~ bởi duriangroup on Tháng Bảy 11, 2007.

 
%d bloggers like this: