2016-07-16 8 views
0

Dieses Programm druckt die erste Anweisung und wird beendet, nachdem ich eine Zahl z. "5", ohne etwas anderes zu drucken. Von der Logik, die ich in die case Anweisung eintrage, würde ich erwarten, dass es "Du bist kein Erwachsener :(" für 5 ausgibt. Andere Werte unter 120 funktionieren auch nicht wie erwartet.Meine Case-Anweisung funktioniert nicht, aber die Logik sieht für mich richtig aus

Was ist los?

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

Da du 'age.to_i' immer wieder verwendest, solltest du' age = gets.chomp.to_i' nur einmal konvertieren und dann verwenden. Was passiert auch, wenn jemand 18 eingibt? Das wird nicht zu beiden Fällen passen. Sie verhindern auch, dass jemand jünger als 120 Ihre Nachricht sieht. – tadman

+0

Was ist falsch? Du sagst es. – sawa

+0

Sie fragen, ob ein Boolescher Wert mit einer Zahl übereinstimmt. Offensichtlich tut es das nicht. –

Antwort

4

die Sie interessieren Hinweis ließ ich habe die age.to_i aus der case Aussage:.

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

Eine kleine Erklärung ist in Ordnung.

Wenn Sie schreiben dies:

case foo 
    when "bar" 
    ... 

Das bedeutet im Wesentlichen:

if "bar" === foo 
    ... 

So Ihr Code ein bisschen wie das war:

if age.to_i<18 === age.to_i 
    ... 

, die machen nicht viel der Sinne. Wenn Sie einfach case mit nichts danach schreiben, dann funktioniert es eher wie eine normale if Aussage. Z.B.

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

bedeutet in etwa

if foo === "bar" 
    ... 

das ist, was Sie wollen. Ich hoffe das hilft!

+0

@KarenB Meinten Sie case age.to_i <18'? – smarx

+0

Ja, das habe ich wirklich getan, danke. Ich beschuldige Katze auf der Tastatur. Wird reparieren. –

+0

(Neubearbeiteten Kommentar) 'Fall age.to_i <18/wenn wahr/wenn falsch 'würde auch funktionieren und fühlt sich ein bisschen natürlicher für mich. Verpasst auch nicht den Fall, wenn age.to_i == 18 –

0

Hier ist eine aufgeräumt Version:

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 

all dies in eine einzige case Anweisung Falt- und Bereiche machen mit, was viel mehr klar passiert.

+0

Ich glaube, 'chomp' wird hier auch nicht benötigt. –

+0

@ sagarpandya82 Technisch nein, das 'to_i' wird das sowieso klären. – tadman

Verwandte Themen