Module Module1
创新互联公司IDC提供业务:多线BGP机房,成都服务器租用,多线BGP机房,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。
Sub Main()
Dim sum As Integer = 0
Dim Bound As Integer = 989
Dim num As Integer = 0
Dim cprime As Integer = 0
Do
num += 1
If IsPrame(num) Then
sum += num
cprime = num
End If
Loop Until sum Bound
Console.WriteLine(sum - cprime)
Console.ReadKey()
End Sub
'判断一个数是不是素数
Public Function IsPrame(ByVal num As Integer) As Boolean
If num = 1 Then Return False '素数的定义是大于1
For i = 2 To CType(Int(Math.Sqrt(num)), Integer)
If num Mod i = 0 Then Return False
Next
Return True
End Function
End Module
Threading.Thread.Sleep(500)这句是线程停止等待的,在这500毫秒的时间里你的任何动作都是不响应的,理论上再SendKeys.Send(TextBox2.Text)这段时间内你可以动作,但是send是毫秒级完成的,你还没有来得及响应就进入了下一次的循环,所以跟卡死类似
解决方法:通过timer定时器延时
Do循环由Do和Loop构成,但如果只有Do和Loop的话将不停地执行Do和Loop之间的语句块,所以需要使用可选的关键字While或Until以及Eixt Do来指定循环的条件以及退出循环.\x0d\x0a关键字While是指当条件为True时执行循环,而Until则是在条件变为True之前重复,就你的例子来说,用关键字Until给出了X=-1这个条件,意思就是在X=-1这个条件不成立的时候循环一直重复执行,直到X=-1这个条件成立了,则结束循环.\x0d\x0a下面是详细的例句解析:\x0d\x0aDo循环在使用关键字While或Until的时候有两种写法,一种是放在开头,一种是放在结尾,而Eixt Do则是插在循环体内语句块的任何地方,,用来在需要的时候退出循环.\x0d\x0a关键字While或Until的两种写法见如下格式:\x0d\x0a[第一种]\x0d\x0aDo While(或Until) 条件 '关键字和条件放在开头\x0d\x0a语句块\x0d\x0aLoop\x0d\x0a这种格式是用关键字While指定的条件为True时执行循环,或用Until在指定的条件变为True之前重复执行循环.\x0d\x0a[第二种]\x0d\x0aDo\x0d\x0a语句块\x0d\x0aLoop While(或Until) 条件 '关键字和条件放在结尾\x0d\x0a这种格式是不管条件是否成立,都先执行一次循环,然后再判断条件来决定是否继续循环.\x0d\x0aDo\x0d\x0a If (a * i ^ 2 + b * i + c) * (a * m ^ 2 + b * m + c) 0 Then\x0d\x0a i = m\x0d\x0a End If\x0d\x0aLoop Until Abs(i - s)
回答于 2022-12-11
定义一个公有布尔值变量 flag,初始值 False。
循环里最开始 If 判断一下 flag,如果为 True 就 Exit Do 跳出循环,否则继续循环。
然后在别的函数控制 flag 的值就可以了。
P.S. 你这段代码是死循环,直到程序占用内存越来越大溢出进而程序崩溃为止……