我在计算Visual Basic中的时差时遇到困难

时间:2018-12-23 06:32:53

标签: vb.net time

Layout of Calculator

我正在尝试构建一个程序,以分钟为单位计算时间差。我通过从结束时间中减去开始时间来做到这一点。我有四个文本框,其中两个用于小时(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

4 个答案:

答案 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应该位于第一个,然后是其他文本框。