2016-05-02 8 views
1

バリデーターを正しく機能させることができません。単純なコード行が正しく検証されていませんか?

ユーザは、文字A〜F(大文字と小文字)を入力できるようにする必要があります。ここで

は私のコードです:

print "Enter a letter A-E to add to your order " 

items=gets.upcase.chomp 

if items != ("A" || "B" || "C" || "D" || "E") 
    puts ("Incorrect Letter") 
end 

「A」または「」が入力されているが、それは他の数字のいずれかのまったく動作しない場合には正しく機能します。それはうまくいくはずです。

ここで間違っているのは何ですか?その上

nil || "B" 
#=> "B" 
false || "B" 
#=> "B" 
"A" || false 
#=> "A" 
"A" || "B" 
#=> "A" 
"A" || "B" || "C" 
#=> "A" 

と: "A" はfalseのではないnilあるので、

答えて

1

("A" || "B" || "C" || "D" || "E")は常に、Rubyで "A" を返します。

あなたはincludeを使用する必要があります。

unless ["A","B","C","D","E"].include?(items) puts ("Incorrect Letter") end 

あなたは小文字と大文字の両方の文字を含めたいので、私はこれをお勧め:

unless ("a".."e").include?(items.downcase) puts ("Incorrect Letter") 
1

("A" || "B" || "C" || "D" || "E")は常に "A" に評価される式であります「A」は「真実」であるからです。入力は、多くの選択肢の一つである場合はそのため、あなたのif文を確認するにはif items != 'A'

に相当し、使用アレイのinclude?機能:http://ruby-doc.org/core-2.2.0/Array.html#method-i-include-3F

if ["A", "B", "C", "D", "E"].include?(items)

+0

'(" A ".." E ")。include?' – photoionized

2
if (items != "A" || items != "B" || items != "C" || items != "D" || items != "E") 

はと作業バージョンです「| | "。

unless items.between?("A", "E") 

はおそらく読みやすくなります。

関連する問題