2014-02-18 3 views
1

다면체 주사위를 롤링하는 프로그램을 작성했지만 실행할 때마다 아래 오류가 나타납니다. 그것은 내 프롬프트를 표시하고 내 번호를 입력하게하지만, 그 후에는 내 번호가 엉망이됩니다. 나는 온라인으로 수정 프로그램을 찾으려고했지만 사람들은 times 메서드가 정의되지 않은 다른 문제에 대해서만 이야기합니다. Ruby에 익숙하지 않아 도움이 될 것입니다.루비가 시간 메서드를 인식하지 못합니다

내 프로그램 :

p = 0 
while p < 1 
puts "Choose your die type" 
die_type = gets.chomp 

puts "Choose your number of die" 
die_number = gets.chomp 

total = 0 
i = 1 

die_number.times do 
    random_int = 1 + rand(die_type) 
    total += random_int 
    i += 1 
end 
puts total 
end 

내가 오류 :

/dieroll.rb:13: undefined method 'times' for "5":String (NoMethodError) 
+0

터미널은 루비 스크립트를 해석하는 것과 아무 관련이 없습니다. 아마도 스크립트 자체에 문제가 있습니까? –

답변

2

변경 die_number = gets.to_idie_number = gets.chomp. die_number = gets.chomp은 로컬 변수 die_number에 문자열을 할당합니다 (Kernel#gets이 문자열 객체를 제공하기 때문에). String#times이라는 메서드가 없으므로 Fixnum 클래스에 해당 메서드가 있습니다.

또한 die_type = gets.chomp에서 die_type = gets.to_i으로 변경하면 첫 번째 오류를 해결 한 후에 다음 오류를 피할 수 있습니다.

1.respond_to?(:times) # => true 
"1".respond_to?(:times) # => false 

에서 당신이 경우 die_number 따라서 귀하의 시도 "5".times은 "5"에 대한 정의되지 않은 메서드 '배'와 같은 오류를 제기 "5"했다 : 문자열 (NoMethodError).

관련 문제