Получение чисел из массива в подпрограмму, содержащую расчет в VB

Поэтому мне нужно, чтобы консольное приложение запрашивало у пользователя имена, часы и ставку оплаты. Эти ответы будут храниться в соответствующих массивах. Мне нужно использовать информацию из часов и массивов заработной платы в расчете, содержащемся в подпрограмме. Я пытался найти какую-то подсказку в своем учебнике или в Интернете, но я не могу найти ничего, что помогло бы мне в этой ситуации...

Я не понимаю ошибку, которую я получаю в следующих строках.

total = overtimePay(hours(i), rate(i))
total = regularPay(hours(i), rate(i))

ошибка, которую я получаю:

"Значение типа "Double" не может быть преобразовано в "одномерный массив Double"

моя программа работает полностью, когда я просто помещаю здесь расчетные уравнения вместо подпрограмм

Вот весь мой код.

Module FinalAssignment1


Sub Main()


    'Author: Russell Peryy
    'Date: 4/2/16
    'Purpose: User enters info and program outputs the entered pay and calculated info

    'Declare constants
    Const author As String = "Russell Perry =================== Final Assignment 1"
    Const lines As String = "===================================================="

    'Declare Arrays
    Dim names(0 To 10) As String
    Dim hours(0 To 10) As Double
    Dim rate(0 To 10) As Double
    'Dim total(0 To 10) As Double


    'Declare variabels
    Dim i As Integer = 0
    Dim total As Double = 0

    'Display constants
    Console.WriteLine(author)
    Console.WriteLine(lines)
    space(1)

    'Get user information to fill name, hours, and rate array
    For i = 0 To 9 Step 1
        Console.Write("Enter employee's last name >> ")
        names(i) = Console.ReadLine()

        Console.Write("Enter employee's hours worked >> ")
        hours(i) = Console.ReadLine()

        Console.Write("Enter the employee's pay rate >> ")
        rate(i) = Console.ReadLine()

        'i = i + 1
        space(1)
    Next

    space(1)
    Console.WriteLine(lines)

    'Print info to screen
    For i = 0 To 9 Step 1
        If hours(i) >= 40 Then
            total = overtimePay(hours(i), rate(i))
            'total = (40 * rate(i)) + ((hours(i) - 40) * rate(i) * 1.5)
        Else
            total = regularPay(hours(i), rate(i))
            'total = hours(i) * rate(i)
        End If

        Console.WriteLine(names(i) & " worked " & hours(i) & " at a rate of " & String.Format("{0:C}", rate(i)) & " an hour for a total pay of " & String.Format("{0:C}", total))

    Next i

    'Pause the screen
    space(1)
    Console.WriteLine(lines)
    space(1)
    Console.Write("Press any key to exit >> ")
    Console.ReadKey()

End Sub

'subroutine for adding spaces
Sub space(ByVal x As Integer)
    For counter = 0 To x
        Console.WriteLine()
    Next
End Sub

'Subroutine for regular pay
Sub regularPay(ByVal array1() As Double, ByVal array2() As Double, ByVal i As Integer)
    Dim t As Double = array1(i) * array2(i)
End Sub

'subroutine for overtime
Sub overtimePay(ByVal array1() As Double, ByVal array2() As Double, ByVal i As Integer)
    Dim total As Double = ((40 * array2(i)) + ((array1(i) - 40) * array2(i) * 1.5))
End Sub
End Module

person cryosneasel    schedule 03.04.2016    source источник


Ответы (2)


Когда вы вызываете функции, параметры не являются массивом, они являются двойными внутри массива. Таким образом, ваши две функции не должны иметь параметры «ByVal array2() как двойные», а вместо этого должны быть просто «часы как двойные» (для массива1) и «скорость как двойные». В этот момент вам не понадобится индекс i в массиве, так как вы не передаете массив.

Затем в одной строке внутри функций не используйте "array2(i)", просто используйте "rate" и вместо "array1(i)" просто используйте имя параметра "hours"

person astrosteve    schedule 03.04.2016
comment
Итак, как я узнаю, что хочу, чтобы он читался в каждом номере обоих массивов? Я попробовал предложение, которое вы сделали, но я все еще получаю ту же ошибку... - person cryosneasel; 03.04.2016
comment
На самом деле я только что разобрался с проблемой. Я изменил подпрограммы на функцию, и она отлично работает. Наш учитель дал нам код подпрограммы, сказав, что это подпрограмма. Ну что ж. Я получил его на работу сейчас. Спасибо за помощь! - person cryosneasel; 03.04.2016

Вы не передаете массив, вы передаете значение из массива, часы (i) - это двойное значение элемента i из часов массива

person Will BeDeleted    schedule 03.04.2016