Вот файл класса:
class HealthProfile
attr_reader :firstName, :lastName, :gender, :birthYear, :currentYear, :height, :weight
attr_writer :firstName, :lastName, :gender, :birthYear, :currentYear, :height, :weight
def initialize(firstName, lastName, gender, birthYear, currentYear, height, weight)
@firstName = firstName
@lastName = lastName
@gender = gender
@birthYear = birthYear
@currentYear = currentYear
@height = height
@weight = weight
end
def userAge(currentYear, birthYear)
age = currentYear - birthYear
return age
end
def maxHeartRate(age) #The maximum heart rate is computed as 220 minus age in years
maxhr = 220 - age
return maxhr
end
def targetHeartRateRange(maxhr) #The target-heart-rate is a range that is 50-89% of the maximum heart rate
lowtarget = 0.50 * maxhr
hightarget = 0.89 * maxhr
return lowtarget, hightarget
end
def BMI(weight, height) #(weight:lbs * 703) / (height:inches * height:inches)
bmi = (weight * 703) / (height * height)
return bmi
end
def displayHealthProfile(firstName, lastName, gender, age, height, weight, maxhr, lowtarget, hightarget, bmi)
puts ("HEALTH PROFILE FOR: #{firstName lastName}")
puts ("***********************************")
puts
puts ("Gender: #{gender}")
puts ("Age: #{age}")
puts ("Height (in inches): #{height}")
puts ("Weight (in pounds): #{weight}")
puts ("Maximum heart rate: #{maxhr}")
puts
puts
puts ("Target heart rate range")
puts ("*************************")
puts
puts ("Minimum: #{lowtarget}")
puts ("Maximum: #{hightarget}")
puts ("BMI: #{bmi}")
puts
puts
puts ("BMI VALUES")
puts ("************")
puts
puts ("Underweight: less than 18.5")
puts ("Normal: between 18.5 and 24.9")
puts ("Overweight: between 25 and 29.9")
puts ("Obese: 30 or greater")
end
end
Вот основной код файла:
require_relative 'lab11class.rb'
require 'date'
currentYear = Date.today.year
currentYear = currentYear.to_i()
print ("Enter your First Name: ")
firstName = gets()
print ("Enter your Last Name: ")
lastName = gets()
print ("Enter your gender (Male/Female): ")
gender = gets()
print ("Enter your year of birth: ")
birthYear = gets().to_i()
print ("Enter your height in inches: ")
height = gets().to_i()
print ("Enter your weight in pounds: ")
weight = gets().to_i()
hp = HealthProfile.new(firstName, lastName, gender, birthYear, currentYear, height, weight)
age = hp.userAge(currentYear, birthYear)
maxhr = hp.maxHeartRate(age)
lowtarget, hightarget = hp.targetHeartRateRange(maxhr)
bmi = hp.BMI(weight, height)
hp.displayHealthProfile(firstName, lastName, gender, age, height, weight, maxhr, lowtarget, hightarget, bmi)
Вот полная ошибка
lab11class.rb:40:in `displayHealthProfile': wrong number of arguments (given 1, expected 0) (ArgumentError)
Проблема, по-видимому, связана с методом displayHealthProfile. Следует ожидать 10 аргументов, но когда я ввожу все 10 в основной файл, это выдает ошибку.
Однако, если я удаляю один или несколько аргументов из вызова в главном файле, я получаю сообщение об ошибке, за исключением того, что оно говорит (учитывая 9, ожидаемое 10) и так далее, если я должен был удалить больше.
Я что-то пропустил? Любая помощь приветствуется.
UPDATE
Я исправил это, и программа работает должным образом. Проблема не была с методом вообще, displayHealthProfile был определен правильно. Проблема была с переменными firstName и lastName, которые были первыми, использованными в методе. Эти две переменные были проанализированы с символами новой строки, которые не соответствовали вызову метода. Итак, вот изменения, которые это исправили.
Оригинал
puts ("HEALTH PROFILE FOR: #{firstName lastName}")
Изменено на:
puts ("HEALTH PROFILE FOR: #{firstName.chomp} #{lastName.chomp}")
Спасибо за ваши ответы!