0
puts 'Please enter your age '
age=gets.chomp
age=age.to_i

if  age >=18
division='in the adult '

elsif age >=12
division='in the junior '

elsif age >=5
division='in the novice '

else    
puts 'We are sorry, but you are ineligible to play in the league at this time.'

end
puts 'Congratulations! You are '+division+'league.'

sleep 5

私が得るエラーはこれです:

We are sorry, but you are ineligible to play in the league at this time.
:18:in `+': can't convert nil into String (TypeError)
:18:in `<main>'
4

3 に答える 3

1

divisionが nilであるため、そのメッセージが表示されます。どの条件も満たされない場合、「申し訳ありません」というメッセージが表示されますが、division変数には値が割り当てられません。

次のようにしてそれを取り除くことができます:

puts 'Congratulations! You are '+division+'league.' unless division.nil?
于 2013-04-02T20:28:01.323 に答える
1

これは、 を初期化していないためdivisionであり、したがって nil.Initialize 分割に設定されているためです。

division = 'in no'

それは、else ブロック内または最初の if の前で行います。

于 2013-04-02T20:30:52.373 に答える
0

あなたのコードがどのようにRubyライクになるかを示すために:

print 'Please enter your age: '
age = gets.chomp.to_i

division = case 
          when age >= 18
            'adult'

          when age >= 12
            'junior'

          when age >=5
            'novice' 

          else    
            nil

          end

if division
  puts "Congratulations! You are in the #{ division } league."
else
  puts 'We are sorry, but you are ineligible to play in the league at this time.'
end

もっときついかもしれませんが、これが私のやり方です。また、コードdivisionは が設定されているかどうかをチェックするため、表示されているエラーは返されません。

于 2013-04-02T20:54:00.103 に答える