我的学习手册对以下代码做了如下陈述:
* * “计算机评估Do ...循环语句中的循环条件,以确定是否应该处理循环指令。在这种情况下,inputales<> String.Empty condition将输入销售变量的contenst与String.Empty值进行比较。如您所知,String.Empty值表示零长度或空的字符串,如果inputsales变量为空,则循环条件的计算结果为True,计算机进程循环指令。* 另一方面,如果inputales变量不为空,则循环条件的计算结果为false,计算机会跳过循环指令。
基于代码,我认为它是相反的:...虽然inputales值不为空,但它应该评估为true并处理循环,如果它是空的,它应该计算为false并跳过循环?请看下面。非常感谢你的帮助!
Option Explicit On
Option Strict On
Imports System.Globalization
Public Class SalesForm
Private Sub exitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitButton.Click
Me.Close()
End Sub
Private Sub calcButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcButton.Click
Const prompt As String = "Enter a sales amount. Click cancel to end."
Const title As String = "Sales Entry"
Dim inputsales As String
Dim sales As Decimal
Dim salesCounter As Integer
Dim salesaccumulator As Decimal
Dim salesAverage As Decimal
Dim isconverted As Boolean
inputsales = InputBox(prompt, title, "0")
**Do While inputsales <> String.Empty
isconverted = Decimal.TryParse(inputsales, NumberStyles.Currency, NumberFormatInfo.CurrentInfo, sales)
If isconverted = True Then
salesCounter = salesCounter + 1
salesaccumulator = salesaccumulator + sales
Else
MessageBox.Show("Please re-entere the sales amount.", "sales Express", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
inputsales = InputBox(prompt, title, "0")
Loop**
If salesCounter > 0 Then
salesAverage = salesaccumulator / Convert.ToDecimal(salesCounter)
averageLabel.Text = salesAverage.ToString("C2")
Label2.Text = salesCounter.ToString
Else
averageLabel.Text = "0"
End If
End Sub
End Class
答案 0 :(得分:6)
你肯定是对的,这本书是错的(希望,作者只是偶然地颠倒了真/假;否则,我会得到另一本书)。我建议的更正(添加一些):
如您所知,String.Empty值表示零长度或空字符串。如果
inputsales
变量不为空,则循环条件计算为True
,计算机处理循环指令(然后跳回到循环顶部并重新评估条件)。另一方面,如果inputsales
变量 为空,则循环条件计算为False
,计算机会跳过循环指令(并继续第一个语句)循环之后)。
正如@xanatos所说:恭喜你在别人的文字中抓住你的第一个错误。所以问题的+1,我会说这对你的编程生涯很有希望。 : - )
答案 1 :(得分:1)
是的,你是对的。当inputsales
非空时,将执行循环。说明错了。