作为主题,这是我的代码。 任何人都可以帮我解决这些代码的错误,因为我在运行它时会显示错误。
Dim age As Integer
age = CInt(lblResult.Text)
Do While age ^ 2 - 1980 <> age
age = age + 1
lblResult.Text = "The solution is " & CStr(age) & " years old."
Loop
答案 0 :(得分:2)
我的猜测是StackOverflowException
因为无限循环,从这些行开始:
Do While age ^ 2 - 1980 <> age
age = age + 1
lblResult.Text = "The solution is " & CStr(age) & " years old."
Loop
由于你正在修改循环中age
的右手比较值,而且违反循环的条件是age ^ 2 - 1980
等于age
,那么这个条件永远不会发生
不确定age ^ 2 - 1980 <> age
的逻辑究竟应该是什么,但请执行以下操作之一:
lcv
的比较的循环计数器变量(即Do
)。Do
的条件更改为不等于(<>
)的条件,大于或小于。同样,这很难推荐,因为我真的不知道这个循环的目的是什么。最后,您无需使用CStr()
将Integer
转换为String
,只需使用ToString()
变量的Integer
,这样:
lblResult.Text = "The solution is " & age.ToString() & " years old."
OR
使用String.Format()
,如下所示:
lblResult.Text = String.Format("The solution is {0} years old.", age)
答案 1 :(得分:0)
错误可能来自
age = CInt(lblResult.Text)
用Val()替换CInt(),它可能运行得更好
age = Val(lblResult.Text)
与其他人一样,我也对你的循环逻辑感到困惑:
你只在以下时间停止循环:年龄^ 2 - 1980 =年龄
一些简单的数学解决了年龄= 45岁(或年龄= -44岁)
为什么不简单地循环直到年龄= 45岁?
在你的情况下,它确实有效,因为你的循环方程有一个整数解,但如果答案是年龄= 45.3怎么办?在这种情况下,你的循环将是无穷无尽的