Javascript “编码挑战”;ArithGeoII“;为什么不是';t函数工作吗?

Javascript “编码挑战”;ArithGeoII“;为什么不是';t函数工作吗?,javascript,if-statement,for-loop,Javascript,If Statement,For Loop,这就是挑战: function arithGeoII(arr) { var x = "none of the above"; for (i = 0; i < arr.length; i++) { if ((arr[i + 1]) - (arr[i])) === ((arr[i + 2]) - (arr[i + 1])) { x = "arithmetic"; } else if ((arr[i + 1]) / (arr[i])) === ((arr[i

这就是挑战:

function arithGeoII(arr) {
var x = "none of the above";
  for (i = 0; i < arr.length; i++) {
    if ((arr[i + 1]) - (arr[i])) === ((arr[i + 2]) - (arr[i + 1])) {
        x = "arithmetic";
    } else if ((arr[i + 1]) / (arr[i])) === ((arr[i + 2]) / (arr[i + 1])) {
        x = "geometric";
    } 
  }
  return x;
}
使用JavaScript语言,让函数ArithGeoII(arr)获取存储在arr中的数字数组,如果序列遵循算术模式,则返回字符串“算术”;如果序列遵循几何模式,则返回“几何”。如果序列不遵循任何一种模式,则返回“NOTE”。算术序列是指每个数字之间的差值是一致的,在几何序列中,第一个数字之后的每个项乘以某个常数或公共比率。算术示例:[2,4,6,8]和几何示例:[2,6,18,54]

这是我的解决方案:

function arithGeoII(arr) {
var x = "none of the above";
  for (i = 0; i < arr.length; i++) {
    if ((arr[i + 1]) - (arr[i])) === ((arr[i + 2]) - (arr[i + 1])) {
        x = "arithmetic";
    } else if ((arr[i + 1]) / (arr[i])) === ((arr[i + 2]) / (arr[i + 1])) {
        x = "geometric";
    } 
  }
  return x;
}
函数arithGeoII(arr){
var x=“上述任何一项”;
对于(i=0;i

我已经找到了一些有意义的解决方案,但我很好奇为什么我的解决方案不起作用?我显然是一个初学者(所以答案对大多数人来说可能是显而易见的),但我真的非常感谢任何帮助

问题在于,一旦某个条件在某个地方失败,您必须立即退出循环

否则,您只检查最后的数字

例如,您的代码会说
[0,0,0,0,0,0,0,1,2]
是一个算术序列,因为
1-0==2-1
。但事实并非如此,因为条件
arr[i+1]-arr[i]===arr[i+2]-arr[i+1]
并非处处适用

一些工作实例:

函数算术(arr){
对于(变量i=2;i}
问题是迭代将对第一个和第二个值有效,但对第三个值无效,因为使用此
arr[1+2]
时不会有数字,因为它将高于数组中的设置。同样,每次迭代您都要覆盖
x
,我怀疑这是您想要做的,您还必须处理代码中的异常。您的代码可能会使索引超出范围。制作多维数组,其中take对象可以容纳4个项目,如:var a=[];a[0]=[1,2,3,4];a[1]=[4,5,6,7];问题不止于此,你的解决方案是错误的。你认为[0,1,2,4]会返回什么?@Gildor我解释了主要问题(也有语法错误)。我的解决方案不会错,因为我没有包含任何内容(如果你愿意,我可以)<代码>[0,1,2,4]
既不是算术的,也不是几何的,因为
2-1!==4-2和
1/0!==2/1
。好吧,这取决于当某个条件在某个地方失败时如何理解。我明白你所说的,但在我看来还不清楚,因为有几种方法可以“失败”这种情况。谢谢-你的解决方案和例子帮助很大。我仍然很好奇为什么[2,4,8,16,200]返回“几何”值。。。ps-投了赞成票,但不会改变公众分数lol@LukeSchunk
[2,4,8,16,200]
使用我的两个示例生成
“无”