首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Basic自动售货机

Visual Basic自动售货机
EN

Stack Overflow用户
提问于 2014-05-01 21:14:27
回答 3查看 4.1K关注 0票数 2

我已经开始用Visual Basic编写自动售货机代码。到目前为止,它是有效的,但我希望它能在你买不起东西的时候给出一个错误消息。它仍然是相当基本的,上面还没有项目,但我希望在我开始任何其他东西之前,先把它弄清楚。目前,它为"Then“语句提出了一个错误,并且不知道如何修复它。再说一次,我对它非常陌生,并提出了任何建议。谢谢。

代码语言:javascript
复制
Public Class Form1

Private Sub BuyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuyButton.Click

    Dim Cost, Amount, Change As Decimal
    Dim Pennies, Pounds As Integer
    Dim msg As String

    Cost = Decimal.Parse(CostTextBox.Text)
    Amount = Decimal.Parse(AmountTextBox.Text)
    Change = (Amount - Cost) * 10

    Pounds = Change \ 10
    Change = Change Mod 10

    Pennies = Change \ 10
    Change = Change Mod 10

    If Change = "Your change is: -" Then

        msg = "You don't have enough Money"

    Else

        msg = "Your change is: " & Change & vbNewLine
        msg += "Pennies: " & Pounds & vbNewLine
        msg += "Pounds: " & Pennies & vbNewLine

    End If

    ChangeLabel.Text = msg

End Sub
End Class

我使用过的解决方案:公共类Form1

代码语言:javascript
复制
Private Sub BuyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuyButton.Click

    Dim Cost, Amount, Change As Decimal
    Dim Pennies, Pounds As Integer
    Dim msg As String

    Cost = Decimal.Parse(CostTextBox.Text)
    Amount = Decimal.Parse(AmountTextBox.Text)
    Change = (Amount - Cost)

    If Change < 0 Then

        msg = "You don't have enough Money"
        AmountTextBox.Text = Change + Cost

    Else

        AmountTextBox.Text = Change
        Pounds = Math.Floor(Change)
        Pennies = (Change - Pounds) * 100

        msg = "Your change is: " & Change.ToString("##.00") & Environment.NewLine
        msg += "Pounds: " & Pounds & vbNewLine
        msg += "Pennies: " & Pennies & vbNewLine

    End If
    ChangeLabel.Text = msg
End Sub
EN

回答 3

Stack Overflow用户

发布于 2014-05-01 22:02:12

首先,为了检查是否有足够的钱,您可以检查零头是否小于0- If Change <0 Then ...。其次,您将使用Change = Change mod 10更改Change,因此最终您将不会得到正确的结果。第三,它更容易使更改为整数。要获得找零的最后两位数(便士),您应该使用Pennies=Change mod 100,而要获得其他数字(磅),您应该使用Pounds=Change\100。第四,您在创建消息时交换了英镑和便士。最后,如果有零钱,你只需要把零钱分成英镑和便士。

代码语言:javascript
复制
Public Class Form1

Private Sub BuyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuyButton.Click

    Dim Amount, Change As Decimal
    Dim Cost, Pennies, Pounds As Integer
    Dim msg As String

    Cost = Decimal.Parse(CostTextBox.Text)
    Amount = Decimal.Parse(AmountTextBox.Text)
    Change = (Amount - Cost) * 100

    If Change < 0 Then

        msg = "You don't have enough Money"

    Else

        Pounds = Change \ 100
        Pennies = Change Mod 100
        msg = "Your change is: " & Change & vbNewLine
        msg += "Pounds: " & Pounds & vbNewLine
        msg += "Pennies: " & Pennies & vbNewLine

    End If

    ChangeLabel.Text = msg

End Sub
End Class
票数 1
EN

Stack Overflow用户

发布于 2014-05-01 22:33:33

如果我是你,我会考虑简化一下。不要再除以10,再乘以10 --这对你的事业没有帮助。去做这样的事情。

代码语言:javascript
复制
Dim Cost, Amount, Change As Decimal
    Dim Pennies, Pounds As Integer
    Dim msg As String

    Cost = Decimal.Parse(CostTextBox.Text)
    Amount = Decimal.Parse(AmountTextBox.Text)
    Change = (Amount - Cost)  --Work in pounds

    If Change < 0 Then

        msg = "You don't have enough Money"

    Else

        Pounds = Math.Floor(Change)
        Pennies = (Change - Pounds) * 100  --Multiply pounds by 100 to get pence

        --Environment.NewLine is the preferred way to insert a newline which will
        --always be correct for the environment.
        msg = "Your change is: " & Change.ToString("##.00") & Environment.NewLine --Note the .ToString("##.00") - this tells VB to convert the number to a string and show two decimal places
        msg += "Pounds: " & Pounds.ToString() & Environment.NewLine
        msg += "Pennies: " & Pennies.ToString() & Environment.NewLine

    End If

    ChangeLabel.Text = msg

不惜一切代价避免隐式转换。是的,Pounds = Change / 10可以工作,但它是一种隐式的缩小范围,可能不会像您期望的那样工作。我们在这里使用Math.Floor的原因是因为我们想要小数的整数部分,这就是Math.Floor所做的-给出等于或小于所提供的值的最大整数。

还要注意Change.ToString的使用-所有内部类型都是从超类型Object派生的,这意味着它们实现了方法ToString。这将为您提供对象值的显式转换字符串表示形式,您可以通过提供掩码(括号中的"##.00#"位)对其应用格式化。Have a look at the MSDNpage on the subject查看有关将自定义格式应用于字符串的更多信息。

票数 1
EN

Stack Overflow用户

发布于 2014-05-01 21:20:31

代码语言:javascript
复制
If Change = "Your change is: -" Then

change值应该等于一个值,而不是一个字符串。需要将其更改为如下所示

If change < 0 Then

通常,当我控制字符串时,我会使用&运算符,因为我不太确定=+版本是否有效(我从未尝试过)

代码语言:javascript
复制
msg = msg &  "Pennies: " & Pounds & vbNewLine
msg = msg & "Pounds: " & Pennies & vbNewLine
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23408441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档