我已经开始用Visual Basic编写自动售货机代码。到目前为止,它是有效的,但我希望它能在你买不起东西的时候给出一个错误消息。它仍然是相当基本的,上面还没有项目,但我希望在我开始任何其他东西之前,先把它弄清楚。目前,它为"Then“语句提出了一个错误,并且不知道如何修复它。再说一次,我对它非常陌生,并提出了任何建议。谢谢。
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
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发布于 2014-05-01 22:02:12
首先,为了检查是否有足够的钱,您可以检查零头是否小于0- If Change <0 Then ...。其次,您将使用Change = Change mod 10更改Change,因此最终您将不会得到正确的结果。第三,它更容易使更改为整数。要获得找零的最后两位数(便士),您应该使用Pennies=Change mod 100,而要获得其他数字(磅),您应该使用Pounds=Change\100。第四,您在创建消息时交换了英镑和便士。最后,如果有零钱,你只需要把零钱分成英镑和便士。
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发布于 2014-05-01 22:33:33
如果我是你,我会考虑简化一下。不要再除以10,再乘以10 --这对你的事业没有帮助。去做这样的事情。
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查看有关将自定义格式应用于字符串的更多信息。
发布于 2014-05-01 21:20:31
If Change = "Your change is: -" Thenchange值应该等于一个值,而不是一个字符串。需要将其更改为如下所示
If change < 0 Then
通常,当我控制字符串时,我会使用&运算符,因为我不太确定=+版本是否有效(我从未尝试过)
msg = msg & "Pennies: " & Pounds & vbNewLine
msg = msg & "Pounds: " & Pennies & vbNewLinehttps://stackoverflow.com/questions/23408441
复制相似问题