2016-05-04 23 views
0

如果輸入數組分別是算術和幾何系列,則下面的代碼返回「算術」,「幾何」,如果兩者都不是,則返回-1。算術/幾何系列

雖然代碼工作正常,當我改變

if s = arr.length - 1 

if s == arr.length - 1 

while循環中,代碼不能正常工作了。

我不明白爲什麼。不應該==而不是=

def ArithGeo(arr) 

    # code goes here 
    len = arr.length 
    difference = arr[len-1] - arr[len-2] 
    ratio = arr[len-1]/arr[len-2] 

    k = 0 
    s = k + 1 


    while (arr[s] - arr[k]) == difference && s < arr.length 
    if s = arr.length - 1 
     return "Arithmetic" 
    end 
    k += 1 
    end 

    k = 0 

    while arr[s]/arr[k] == ratio && s < arr.length 
    if s = arr.length - 1 
     return "Geometric" 
    end 
    k += 1 
    end 

    return -1 

end 

回答

3

你永遠不會改變我認爲你想要做的s的價值。你應該做的是在點你增加k

k += 1 
s = k + 1 

而且,點在哪裏重新初始化k的幾何測試,要重置s,以及...

k = 0 
s = k + 1 

你也可以完全擺脫變量s,並使其成爲一種方法...在代碼頂部添加這三行

def s(k) 
    k + 1 
end 

並刪除您爲s賦值的所有行,並使用s(k) ... s(k)將始終返回下一個較高值的方法k

2

這兩個語句之間的區別在於變量s設置爲第一個語句而不是第二。第一if語句具有這樣設置的sarr.length - 1

if s = arr.length - 1 # s => arr.length - 1 
if s == arr.length - 1 # s => undefined 

副作用由於if語句是一個while環路,它使用s在其表達的語句的變化改變了PROGRAMM的行爲內部。

+0

謝謝您解釋其背後的基本原理。 – IliasP

0

如果您輸入==該語句將嘗試檢查它們是否相等,只有=該語句正常工作,因爲您只將值設置爲某個值,所以這總是如此。

如果不同,則比較某個等於某個變量的值,而不是隻設置一個變量,該值總是爲true。