這段代碼(它是更大代碼的一部分)的目的是確定一年中是否有重複的數字。這是我的代碼:爲什麼我的回報弄亂了我的結果?
def no_repeat?(year)
year = year.to_s
string = ''
year.each_char{|i| string << year[i] unless string.include?(year[i])}
year.length == string.length ? (return false) : (return true)
end
puts no_repeat?(1993)
它總是返回true,我看不出爲什麼發生這種情況。我試圖將三元語法擴展爲完整的if語句...仍然返回true。我曾嘗試寫這整個方法作爲一個while循環(帶有兩個指標一個指標比較其他)
def no_repeat?(year)
year = year.to_s
i = 0
while i < year.length
i2 = i + 1
while i2 < year.length
if year[i] == year[i2]
return false
else
return true
end
i2 += 1
end
i += 1
end
...還是返回true。我已經獨立地測試了每件事情,並且它們都工作正常,直到我把回報放入。什麼是回報?我需要新鮮的眼睛。
是,each_char正在評估自己,哈哈,我不能相信我沒有趕上的字符當我真的知道,我很習慣寫while循環(試圖突破),你必須區分[i]和object [i] ....在這種情況下,如果沒有重複,我希望方法返回true;如果有,則返回false,這就是爲什麼如果i == i2,那麼將會有重複,因此第一次返回是錯誤的。總體而言,你的建議,以省略真正的假回報一起工作!再次,爲什麼我沒有想到這個?!tuh!我仍然是一個新手,哈哈,謝謝! – HolyMoly 2015-03-19 01:47:07
但很快,只要它是您希望檢查的條件的結果,那麼您放置的順序是否真的很重要?像我一樣?紅寶石只會按照一定的順序讀取它們嗎?我實際上已經嘗試過切換它們,並且它保持返回false,它似乎是跳過第一個返回(無論是在三元組還是while循環中)..爲什麼? – HolyMoly 2015-03-19 01:51:14
它確實很重要。如果條件爲真,結果必須放在第一位,所以如果你想反轉,你會首先放置'假'(在'?'後面)。如果你一直得到錯誤的回報,我還不確定其原因,但它可能是一個古怪的迴歸表達式,而不是三元結果。在while循環中,我沒有試驗過你的代碼,看看它是如何表現的。重要的是使用三元表達式來返回或分配像'var = bool_expression? val_if_true:val_if_false'而不是嘗試在其中放置一個'return' – 2015-03-19 02:11:10