2017年山西高考排名:程序错在哪里?(VB.NET的题目)

来源:百度文库 编辑:高校问答 时间:2024/04/29 08:19:06
在文本框内输入:四川\北京\上海\重庆\南京
按字典顺序排列,程序运行结果总是不对,请大家看一下,错在哪里?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s() As String
s = Split(TextBox1.Text, "\")
Dim c As String
For Each c In s
Response.Write(c & "<br>")
Next

Dim sp As String, n As Int16
sort(s)
For n = 0 To s.Length - 1
sp = sp & s(n) & " "
Next
sp = Trim(sp)
Response.Write("<br>" & sp)
End Sub

Sub sort(ByVal a() As String)
Dim i, j As Int32
Dim t As String
For i = 1 To a.Length
For j = i + 1 To a.Length
If a(j - 1) > a(j) Then
t = a(j - 1)
a(j - 1) = a(j)
a(j) = t
End If
Next
Next
For i = 1 To a.Length
Response.Write("<br>" & a(i))
Next
End Sub
End Class

问题出在你的排序过程里sort(byval a() as string)
你应将那里的双重for循环改为:
For i = 0 To a.Length - 2
For j = i + 1 To a.Length - 1
If a(j - 1) > a(j) Then
t = a(j - 1)
a(j - 1) = a(j)
a(j) = t
End If
Next
Next
因为在VB.NET中不再象VB6中那样可以使数组的下标从1开始,而在VB.NET中所有的数组下标必须从0开始,元素个数就是数组大小,如: 数组a(10)的元素个数就为10,可取到的值为a(0),a(1),……a(9),而不能象VB6中那样可以取到a(10),因为VB6中元素个数为11个。
所以上面的双循环应这样写,a.length的值为数组的元素个数,而它的取值下标为:a(0),a(1),……a(a.length-1),不知你明白了没有。
要验证这个排序是否正确,你可以在文本框中输入英文单词来测试是否正确,因为中文文字的排序也是按ACCISS码进行排序的,或许与它的拼音声母的排序位置不同,而是和英文一样按ACCISS码进行的.