SkyVar
SkyVar

Reputation: 351

Can't understand why my variable doesn't change

I'm building a little time > pay conversion program in VB. I'm really new to VB and don't understand why my variable pay doesn't calculate like it should. I plug in 5 5's as a test and get $0.

Dim total As Double = 0.0
Dim timeCounter As Integer = 0
Dim time As Integer = 0
Dim pay As Double = 0.0

While timeList.Items.Count < 5
    time = timeList.Items(timeCounter)
    total += time
    timeCounter += 1
End While

If total >= 0 And total <= 40 Then
    If total >= 0 And total <= 20 Then
        pay = total * 10
    ElseIf total >= 21 And total <= 30 Then
        pay = total * 12
    ElseIf total >= 31 And total <= 40 Then
        pay = total * 15
    Else
        PayLabel.Text = "Error"
    End If
End If

PayLabel.Text = "$" & pay

Upvotes: 1

Views: 108

Answers (3)

jcwrequests
jcwrequests

Reputation: 1130

This could be better solved with a functional approach. To get the sum of the list of integers do the following:

Dim totalTime = timeList.Sum()

Then you can follow the logic you laid out. I would highly recommend learning to use Linq Set Functions to make your code your readable and easier to understand. Good Luck.

Upvotes: 0

ninnemannk
ninnemannk

Reputation: 1296

Your syntax should be something like this:

For intCount = 0 To timeList.Items.Count
    time = timeList.Items(intCount)
    total += time
Next intCount

This will avoid an infinite loop.

To fix your 40+ issue:

If total >= 0 And total <= 40 Then
    If total >= 0 And total <= 20 Then
        pay = total * 10
    ElseIf total >= 21 And total <= 30 Then
        pay = total * 12
    ElseIf total >= 31 And total <= 40 Then
        pay = total * 15
    End If
Else
    PayLabel.Text = "Error"            
End If

Upvotes: 2

Fredou
Fredou

Reputation: 20100

this would be my fix into a console apps

for process will return $0, second $100

Module Module1

Sub Main()
    Dim timeList As New List(Of Integer)

    timeList.AddRange(New Integer() {1, 2, 3, 4, 5, 6})
    process(timeList)
    timeList.Clear()
    timeList.AddRange(New Integer() {1, 2, 3, 4})
    process(timeList)

    Console.Read()


End Sub

Private Sub process(timeList As List(Of Integer))
    Dim total As Double = 0.0
    Dim timeCounter As Integer = 0
    Dim time As Integer = 0
    Dim pay As Double = 0.0
    While timeList.Count < 5 AndAlso timeCounter < timeList.Count
        time = timeList(timeCounter)
        total += time
        timeCounter += 1
    End While

    If total >= 0 And total <= 40 Then
        If total >= 0 And total <= 20 Then
            pay = total * 10
        ElseIf total >= 21 And total <= 30 Then
            pay = total * 12
        ElseIf total >= 31 And total <= 40 Then
            pay = total * 15
        Else
            Console.WriteLine("error")
        End If
    End If

    Console.WriteLine("$" & pay)
End Sub

End Module

Upvotes: 1

Related Questions