我正在尝试构建一个程序,以分钟为单位计算时间差。我通过从结束时间中减去开始时间来做到这一点。我有四个文本框,其中两个用于小时(h)的时间单位,另外两个用于分钟(m)的时间单位。
a
是开始时间,以小时为单位,而c
是结束时间,以小时为单位。他们乘以60可将小时转换为分钟。我想计算5:40 pm和7:15 pm之间的时差,但有些结果以567应该为95时结束。
这不是一项家庭作业,我是澳大利亚的一名懒惰学习者,他希望创建一个简单的程序,以分钟为单位计算出行车时间。
有人可以告诉我我在做什么错吗?
这是我的代码:
Public Class Calc
Dim Product
Dim a, b, c, d As Integer
Private Sub Enter_Click(sender As Object, e As EventArgs) Handles Enter.Click
a = Val(TextBox1.Text) * 60
b = Val(TextBox2.Text)
c = Val(TextBox3.Text) * 60
d = Val(TextBox4.Text)
Product = (c - a + d - b)
Time.Text = ("Driving Time: " & Product)
End Sub
End Class
答案 0 :(得分:4)
我本来不会发布此消息,但我不能让Dy.Lee对TimeSerial
的使用无解。该代码使用合理的变量名,在时间段内使用正确的类型,即TimeSpan
,并使用Option Strict On
进行编译,这应该总是如此。我也摆脱了Val
的用法,但是在这里我不被打扰。
Private Sub Enter_Click(sender As Object, e As EventArgs) Handles Enter.Click
Dim startHours = CInt(Val(TextBox1.Text))
Dim startMinutes = CInt(Val(TextBox2.Text))
Dim endHours = CInt(Val(TextBox3.Text))
Dim endMinutes = CInt(Val(TextBox4.Text))
Dim startTime As New TimeSpan(startHours, startMinutes, 0)
Dim endTime As New TimeSpan(endHours, endMinutes, 0)
Dim timeDifference = endTime - startTime
Time.Text = ("Driving Time: " & timeDifference.TotalMinutes)
End Sub
编辑:它还在适当的位置声明变量,即在使用它们的方法中声明。如果在其他地方使用相同的变量,则必须坚持使用字段,但我猜想是不这样做。
编辑:这是一个没有狡猾的Val
调用和进行适当验证的版本。您可以将所有If
语句合并为一个,但是将它们分开可以根据问题的类型显示不同的消息。
Private Sub Enter_Click(sender As Object, e As EventArgs) Handles Enter.Click
Dim startHours As Integer
Dim startMinutes As Integer
Dim endHours As Integer
Dim endMinutes As Integer
If Integer.TryParse(TextBox1.Text, startHours) AndAlso
Integer.TryParse(TextBox2.Text, startMinutes) AndAlso
Integer.TryParse(TextBox3.Text, endHours) AndAlso
Integer.TryParse(TextBox4.Text, endMinutes) Then
If startHours < 24 AndAlso
startMinutes < 60 AndAlso
endHours < 24 AndAlso
endMinutes < 60 Then
Dim startTime As New TimeSpan(startHours, startMinutes, 0)
Dim endTime As New TimeSpan(endHours, endMinutes, 0)
If startTime < endTime Then
Dim timeDifference = endTime - startTime
Time.Text = ("Driving Time: " & timeDifference.TotalMinutes)
Else
'Notify user of invalid input.
End If
Else
'Notify user of invalid input.
End If
Else
'Notify user of invalid input.
End If
End Sub
答案 1 :(得分:1)
@PaulHebert向我指出,我需要围绕文本框3和4进行交换,因为我将错误的字段视为小时。数学在我脑海中很有意义,所以我可能忽略了一个相当简单但不便的错误。我要感谢所有尝试提供帮助的人:)圣诞快乐!
答案 2 :(得分:0)
您的数学错误是您要减去小时,然后将它们加到分钟差中。您需要获取每次午夜以来的总分钟数,然后减去这些分钟数。然后获取绝对值,这样您就不会出现负分钟数
Private Sub Enter_Click(sender As Object, e As EventArgs) Handles Enter.Click
a = Val(TextBox1.Text) * 60
b = Val(TextBox2.Text)
c = Val(TextBox3.Text) * 60
d = Val(TextBox4.Text)
Product = Math.Abs((c +d) - (a + b))
Time.Text = ("Driving Time: " & Product)
结束子
答案 3 :(得分:0)
尝试使用此代码
Private Sub Enter_Click(sender As Object, e As EventArgs) Handles
a = CInt(Trim(TextBox1.Text)) * 60
b = CInt(Trim(TextBox2.Text))
c = CInt (Trim(TextBox3.Text)) * 60
d = CInt(Trim(TextBox4.Text))
Product = (c + d) - (a + b)
Time.Text = ( "Driving Time: " & Product)
End Sub
还要确保正确排列了文本框。文本框1应该位于第一个,然后是其他文本框。