Do..While...Loop

8

我的学习书籍对下面的代码做出了以下说明:

**“计算机在Do...Loop语句中评估循环条件以确定是否应处理循环指令。在这种情况下,inputsales <> String.Empty条件将输入销售变量的内容与String.Empty值进行比较。如您所知,如果inputsales变量为空,则String.Empty值表示长度为零或空字符串,此时循环条件评估为True,计算机处理循环指令。另一方面,如果inputsales变量不为空,则循环条件评估为false,计算机跳过循环指令。

根据代码,我认为相反的是正确的:当inputsales的值不为空时,它应该评估为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

8
没错,你说得对(而书上是错的)。你抓住了第一个错误的漏洞 :-) :-) - xanatos
@xanatos,将此作为答案发布。它是正确的。 - Ken White
@Ken 我不会选择简单的答案 :-)... 我认为一个“答案”应该至少长两到三行... 而我不想写两到三行关于这个问题。那样太无聊了。其他人可以捕捉重点 :-) - xanatos
1
@xanatos:不确定是该说“谢谢”还是“疼” :p - Aasmund Eldhuset
@Aasmund 我相信你写的内容一定很无聊(读起来和写起来都是)... 有9行还有我的名字... 所以双倍无聊 :-) :-) - xanatos
2
@xanatos:刚巧偶然发现这个,我必须说我觉得很有趣,你不愿意写2-3行回答来获得积分,但你却愿意写2-3行解释为什么你不愿意写2-3行回答来获得积分,而且还不会因此获得积分...嗯,总之就是这样!我相信你知道我的意思。 - ClarkeyBoy
2个回答

6
您是正确的,这本书是错的(希望作者只是不小心颠倒了真/假的值;否则,我会找另外一本书)。以下是我的建议修正(加了几个细节):
正如您所知,String.Empty 值代表长度为零或空字符串。如果 inputsales 变量不为空,则循环条件评估为 True,并且计算机处理循环指令(然后跳回到循环的顶部并重新评估条件)。另一方面,如果 inputsales 变量为空,则循环条件评估为 False,计算机跳过循环指令(并继续执行循环之后的第一条语句)。
像 @xanatos 说的那样:恭喜您在别人的文本中发现了第一个错误。所以加1分给您的问题,我认为这对您的编程职业似乎是个好兆头。 :-)

1

是的,你说得对。当inputsales不为空时,循环将被执行。描述是错误的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接
  • 相关问题