2016-04-03 5 views
1

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

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

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

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

«Значение типа 'двойной' не может быть преобразован в '1-мерных массив 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 

ответ

1

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

Тогда в одной строке внутри функции, не используйте «array2 (I)», просто использовать «скорость», а вместо «array1 (I)» просто использовать имя параметра «часы»

+0

Итак, как бы я знал, что хочу, чтобы он читался в каждом количество обоих массивов? Я попробовал предложение, которое вы сделали, но я все равно получаю ту же ошибку ... – cryosneasel

+0

На самом деле я только что понял проблему. Я сменил подпрограммы на функцию, и она отлично работает. Наш учитель дал нам код для подпрограмм, говорящих, что это подпрограмма. Ну что ж. Теперь мне нужно работать. Спасибо за помощь! – cryosneasel

0

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