2016-05-04 25 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。