我在程序中添加了一个循环,以确保程序不会输出太难的数学问题;这意味着我需要第一个值(左边的数字)大于右边的值,否则问题将输出否定的答案。然而,我显然做错了,因为它崩溃了程序。
Randomize()
Dim values1 As Integer = CInt(Int((10 * Rnd()) + 1))
First_Number.Text = values1
Sign_Box.Text = "-"
Randomize()
Dim values2 As Integer = CInt(Int((10 * Rnd()) + 1))
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag
Do Until values1 > values2
Loop
有代码,我知道循环是错误的,但是我现在对如何使用循环没有任何想法。感谢您的帮助。
代码2:
Dim values1 As Integer = 0
Dim values2 As Integer() = {2, 4, 5, 10}
Dim randomizer As New Random
Dim value2 As Integer = values2(randomizer.Next(values2.Length))
Do Until values1 > values2
Randomize()
values1 = CInt(Int((10 * Rnd()) + 1))
Loop
First_Number.Text = values1
Second_Number.Text = value2
AnswerTextBox.Tag = values1 / value2
AnswerTextBox.Text = AnswerTextBox.Tag
Sign_Box.Text = "/"
使用上面的代码,我试图做同样的事情,但是我收到了错误:
错误1运营商'>'未定义类型的“整数”和“整数的一维数组”。
答案 0 :(得分:3)
您可以完全消除循环。考虑答案的上限/下限应该是什么,让Rnd()
次调用只生成问题的第二部分和答案。然后,您可以准确地推断出问题的第一部分。这样就不需要编写循环了。
此外,不止一次致电Randomize()
并不是一个好主意。理想情况下,您可以对整个程序或程序段使用相同的Randomize()调用。这是代码:
Dim r As New Random()
Dim value2 As Integer = r.Next(1,11) '1 inclusive, 11 is exclusive. allows values from 1 to 10
Dim answer As Integer = r.Next(0,11-value2) '11-value2 keeps value1 from being higher than you want
First_Number.Text = value2 + answer
Sign_Box.Text = "-"
Second_Number.Text = value2
AnswerTextBox.Tag = answer
AnswerTextBox.Text = AnswerTextBox.Tag
现在为原始代码。您现有的代码崩溃了,因为整个循环都包含在此代码中:
Do Until values1 > values2
Loop
除此之外什么都不重要。由于values1
和values2
都没有在代码中发生变化,如果它们开始失败循环条件,它们将始终使循环条件失败,并且您的代码卡在那里。
要修复它,您可以更改此代码:
Dim values2 As Integer = CInt(Int((10 * Rnd()) + 1))
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag
Do Until values1 > values2
Loop
看起来像这样:
Dim values2 As Intege2 = CInt((10 * Rnd()) + 1)
Do Until values1 > values2
values2 = CInt((10 * Rnd()) + 1)
Loop
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag
但同样,这首先比避免循环更有效。
答案 1 :(得分:1)
这可能不是最好的方法,但是使用你拥有的东西,你可以尝试类似的东西:
Dim values1 As Integer = 0
Dim values2 As Integer = 0
Do Until values1 > values2
Randomize()
values1 = CInt(Int((10 * Rnd()) + 1))
Randomize()
values2 = CInt(Int((10 * Rnd()) + 1))
Loop
First_Number.Text = values1
Sign_Box.Text = "-"
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag