2016-07-16 14 views
0

このプログラムは最初のステートメントを出力し、数字を入力した後に終了します。 "5"、何も印刷しないでください。私がcaseのステートメントに書いたロジックから、私はそれを出力すると期待しています。「あなたは大人ではありません:(「5」の値は他にもあります)私のcaseステートメントは機能しませんが、ロジックは私にとって正しいと思われます

何が問題なのですか?

print "Enter you age " 
age = gets.chomp 

if age.to_i<120 
    case age.to_i 
    when age.to_i<18 
    puts "You're not an adult :(" 
    puts "Sorry" 

    when age.to_i>18 
    puts "You are now an adult!" 
    puts "phew" 
    end 
end 
+0

あなたは 'age.to_i'を繰り返し使用しているので、本当にしたいのは' age = gets.chomp.to_i'を一度変換してから使用することです。誰かが18歳のときに何が起こるか?どちらの場合にも合致しません。あなたはまた、120歳未満の誰もあなたのメッセージを見ることを妨げています。 – tadman

+0

Whtaが間違っていますか?あなたはそれを述べます。 – sawa

+0

ブール値が数値と一致するかどうかを確認しています。明らかに、それはしません。 –

答えて

4

これを試してみて、私はcaseの文からage.to_iを落としました注意:

print "Enter you age " 
age = gets.chomp 

if age.to_i<120 
    case 
     when age.to_i<18 
      puts "You're not an adult :(" 
      puts "Sorry" 

     when age.to_i>18 
      puts "You are now an adult!" 
      puts "phew" 
     end 
    end 

EDIT

少し説明が整っています。

あなたはこの書くとき:

case foo 
    when "bar" 
    ... 

を本質的意味:

if "bar" === foo 
    ... 

をだからあなたのコードは、ソートのこのようなものだった:

多くを作成しません
if age.to_i<18 === age.to_i 
    ... 

意味の後で何も書かずにcaseと書いても、通常のifのように動作します。例えば。

case 
    when foo === "bar" 
    ... 

は意味おおよそ

if foo === "bar" 
    ... 

あなたが望むものです。私はそれが助けて欲しい!

+0

@KarenB 'case age.to_i <18'を意味しましたか? – smarx

+0

うん、確かに、ありがとう、ありがとう。私はキーボードの猫を責めます。修正されます。 –

+0

(Repostingによって編集されたコメント) 'case age.to_i <18/true/falseのときは'も働き、もっと自然な感じです。また、age.to_i == 18 –

0

ここでクリーンアップバージョンです:

print "Enter you age " 
age = gets.chomp.to_i 

case age 
when 0..18 
    puts "You're not an adult :(" 
    puts "Sorry" 
when 18..120 
    puts "You are now an adult!" 
    puts "phew" 
else 
    puts "I think you're lying!" 
end 

は単一caseステートメントにこのすべてを折り畳みと範囲を使用するには、より明確に多くのことを何が起こっているかになります。

+0

私はここでも 'chomp'は必要ないと信じています。 –

+0

@ sagarpandya82技術的には、「to_i」はそれをとにかくクリアします。 – tadman

関連する問題