2015-05-10 68 views
-2

我正在Ruby中編寫一個簡單和小型的程序,根據用戶輸入輸出數字的序數。下面是我寫的:Ruby if/elseif編碼錯誤

puts "Enter a number" 
number = gets.chomp.to_i 

conversion = number % 10 

if number == 11 || number == 12 || number == 13 
    puts "That is #{number}th" 

end 

if conversion == 1 
    puts "That is #{number}st" 
elsif conversion == 2 
    puts "That is #{number}nd" 
elsif conversion == 3 
    puts "That is #{number}rd" 
else 
    puts "That is #{number}th" 

end 

由於我的代碼所示,我想採取從用戶輸入的「數字」,切斷最後一個號碼,並使用單位數字,以確定是否「數字」應是(冷杉)st,(seco)nd,(th)rd或(四)th類型的序數。 「轉換」值應該轉換爲我。但是,可以看出,數字11,12和13是例外。除了我的程序工作正常,當我輸入這三個值中的一個,我得到兩個結果,不是一個,在終端,如:

That is 11st 
That is 11th 

我的本意是,「十一」應顯示,而不是「第11 」。儘管我試圖在我的代碼中寫入異常,但「轉換」仍然得到執行。我不確定我做了什麼錯誤,但有沒有辦法可以隔離第一條if語句,以便我的轉換不包括11,12和13?

+1

'end [if] conversion == 1' should be be'elsif conversion == 1'。 – Biffen

回答

3

這正是你如何編寫程序!

如果數字是11,12,13,它將觸發第一條if語句,如您所期望的那樣。然後它將轉到下一個if語句,因爲它沒有任何理由結束。 puts不是return/break語句(返回/ break語句會破壞此代碼,但這是一個不同的問題),因此代碼將繼續運行直到結束。

最簡單的解決辦法是兩個if語句簡單地合併到主if/else語句:

if number == 11 || number == 12 || number == 13 
    puts "That is #{number}th" 
elsif conversion == 1 
    puts "That is #{number}st" 
elsif conversion == 2 
    puts "That is #{number}nd" 
elsif conversion == 3 
    puts "That is #{number}rd" 
else 
    puts "That is #{number}th" 
end 

這將防止能夠是真實的,如果循環不同的任何數字。