首先,你这个函数的功能是不是判断文本框里输入的数是不是回文数?如果是的话就在lable的text属性里写上这个数字再加一个星号?
错误一、do while(n>10),因为n的值是你一开始就输入进去了,不是在循环中改变的,如果你输入的n大于10了,那就是个死循环了。
错误二、If Mid(n, 1, i) = Mid(n, 1, (Len(n) - i + 1)) Then ,先看下MSDN里mid函数的用法
Public Shared Function Mid( _
ByVal str As String, _
ByVal Start As Integer, _
Optional ByVal Length As Integer _
) As String
其中第二个参数是读取串的开始位置,第三个参数是读取的长度,你这个等号两边,读取串的开始位置一样,长度不一样,怎么可能相等。
错误三、也许对这点我不能确定你的想法,只说说我自己的。如果判断数字串的第一个数和最后一个数相等了,还不能确定它就是回文数,如12341.也就是循环结束了,每一次判断都相等,才能证明它是回文数。
还有一点,我自己测试了一下,n值作为字符串和integer的时候,用Len函数得到的长度不一样。len(n as integer)得到的结果不正确。
我修改了下代码,交流下
程序代码:
Public Class Form1
Function ish(ByVal n As String)
Dim i As Integer
n = TextBox1.Text.ToString
'MsgBox(Len(n)) '测试len函数了
'Dim j As Integer
'j = CInt(Val(n))
'MsgBox(Len(j))
Dim ishw As Boolean = True '标志变量
If n >= 0 And n < 10 Then
Label3.Text &= n & "★"
ElseIf n > 10 Then
For i = 1 To Len(n)
'不知道有没有可以倒着读字符串的函数,所里这里第次只能读一个字符
'第三个参数只能为1
If Mid(n, i, 1) <> Mid(n, Len(n) - i + 1, 1) Then
ishw = False
Exit For
End If
Next
End If
If ishw = True Then
MsgBox(n & "是回文数")
Label3.Text &= n & "★"
Return n
Else
MsgBox(n & "不是一个回文数")
Return 0
End If
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer, n As Integer
n = ish(i)
End Sub
End Class
[
本帖最后由 wei855198 于 2010-4-29 14:25 编辑 ]