2011-07-06 76 views
2

我正在尋找如何在紅寶石領先的零,我發現瞭解決方案:使用%02d「 現在,我想做一個循環,並保持這個零! 當我做這樣的事情導致零和紅寶石增量

i = "%02d" % "1".to_i 
until (i == 10) 
    puts i 
    i += 1 
end 

我有一個錯誤「無法轉換Fixnum對象到字符串」。 所以我決定這樣做

i = "%02d" % "1".to_i 
"01" 
until (i == 10) 
    puts i 
    i = i.to_i 
    i += 1 
end 

所以,這一次,循環工作,但只有第一個數字領先0. 我跑出了主意,所以我會感激一點幫助!

+2

在ruby中,i + = 1通常是可以避免的,注意沒有給出的答案包括那個。 .upto,.times,.each,.each_with_index在Ruby代碼中都會更常見 – Beanish

+1

不要忘記將來會縮進代碼。 –

+0

@Beanish好吧,我不知道,謝謝:) @Andrew Yeap,對不起, – Simon

回答

9

我不是一個Ruby開發者,而且從根本上我認爲你需要分離出i的想法,和文本表示與一家領先的0。所以東西這樣的:

for i in (1..10) 
    puts "%02d" % i 
end 

(你可以從其他的答案看到,有大量的編碼循環本身的方式。)

這裏i始終是一個數字,但表達式"%02d" % i的格式爲i,爲兩位數字,僅用於顯示目的。

+0

謝謝,這正是我需要的!我看到了這兩件事的區別,並且更好地理解了第一個錯誤^^謝謝! – Simon

+0

是的,謝謝喬恩。你是男人。 – Abram

6

在準備好實際輸出之前,不要將其轉換爲字符串以進行輸出。通常,您不會增加字符串值。

0.upto(10) { |i| puts "%02d" % i } 
+0

這很好,但Jon Skeet的解決方案更適合我的代碼。謝謝:) – Simon

+0

這很酷,但你可能想考慮你的代碼是否真的從非Ruby構造中受益(迭代直到')。迭代到你正在做的變量fixnum更接近於本地循環(這正好是Ruby中的Enumerable),這也更具慣用性(參見上文)。 – coreyward

2
10.times do |x| 
    puts "%02d" % x 
end