算术/几何系列

时间:2016-05-04 12:07:38

标签: ruby

下面的代码返回"算术","几何"如果输入数组分别是算术和几何系列,如果不是,则为-1。

虽然代码工作正常,但我改变了

sslContextFactory.setKeyStoreType("BKS");

if s = arr.length - 1

if s == arr.length - 1 循环中,代码不再正常工作。

我不明白为什么。不应该while而不是==吗?

=

3 个答案:

答案 0 :(得分: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)将始终将下一个更高的值返回到{{1} }

答案 1 :(得分:2)

这两个语句之间的区别在于变量s是为第一个语句设置的,而不是为第二个语句设置的。因此,第一个if声明将s设置为arr.length - 1

会产生副作用
if s =  arr.length - 1  # s => arr.length - 1
if s == arr.length - 1  # s => undefined

因为if语句位于while循环中,在其表达式中使用s,所以语句的更改会改变程序的行为。

答案 2 :(得分:0)

如果你输入==语句将尝试检查它们是否相等,只有=语句正常工作,因为你只是将值设置为一个值,所以这总是正确的。

如果不同的东西比较等于设置变量,则可以始终为真。