我正在努力完成以下练习。我的代码有问题,但我不明白它是什么... 使用JavaScript语言,让函数ArithGeo(arr)获取存储在arr中的数字数组,如果序列遵循算术模式则返回字符串“Arithmetic”,如果它遵循几何图案,则返回“Geometric”。如果序列不遵循任何一种模式返回-1。算术序列是每个数字之间的差异是一致的,其中在几何序列中,第一个之后的每个术语乘以某个常数或公共比率。算术示例:[2,4,6,8]和几何示例:[2,6,18,54]。可以输入负数作为参数,不输入0,并且没有数组将包含所有相同的元素。 我的代码:
function ArithGeo(arr) {
if (for (i = 0; i< (arr.length - 2); i++) {
arr[i+1] - arr[i] == arr[i+2] - arr[i+1];
}){
return "Arithmetic";
} else if (for (i = 0; i< (arr.length - 2); i++) {
arr[i+1] / arr[i] == arr[i+2] / arr[i+1];
}){
return "Geometric";
} else {
return -1;
}
};
当我放置像[5,10,15]这样的数组时,我得到“意外的令牌”。有什么想法吗?
答案 0 :(得分:1)
修改了你的代码。没有改变逻辑,而是改变它应该写的方式。
function ArithGeo(arr) {
var ap, gp;
for (i = 0; i< (arr.length - 2); i++)
if(!(ap = arr[i+1] - arr[i] == arr[i+2] - arr[i+1])) break;
if(ap) return "Arithmetic";
for (i = 0; i< (arr.length - 2); i++)
if(!(gp = arr[i+1] / arr[i] == arr[i+2] / arr[i+1])) break;
if(gp) return "Geometric";
return -1;
};
答案 1 :(得分:0)
看起来你正在尝试获取for循环的结果,但是循环没有返回值。考虑在循环外部定义一个布尔变量(最初设置为true),并将它与您在循环内执行的比较结果进行对比;如果循环的每次迭代都是真的,那么变量将在结尾处为真。
例如:
var test = true;
for(var i=0; i<5; i++) {
test = test && ( i != 6 );
}
if(test) {
alert("i was never 6");
}