gpt4 book ai didi

javascript - 在 JavaScript 中将变量放在 for 循环内部而不是外部有什么意义?

转载 作者:行者123 更新时间:2023-11-30 12:03:18 25 4
gpt4 key购买 nike

我不认为这是重复机器人建议的全局局部变量问题,因为当我编辑了错误的代码并将计数器变量放在 for 循环中时,给出了相同的错误输出。

我试图编写一个函数来计算输入单词/字符出现的实例数。

测试数据是:

1-输入(find('The quick brown fox', 'fox')),输出(“fox was found 1 times”)

2-输入(find('aa, bb, cc, dd, aa', 'aa')),输出(“aa被找到2次”)

我尝试解决了两次,第一次的输出是“fox was found 6.333333 times”,第二次的输出是“fox was found 1 times”。

我尝试的两种方法之间的区别在于最终输出计数器的位置和使用的语法。

第一次尝试:

function find(str,key){ 
var count = 0;
var answer = 0;
for (var i = 0; i<str.length; i++){
if (str[i] == key[0] ){
for (var j = i; j<i +str.length; j++){
if (str[j] == key[j-i]){
count = count + 1;
}
}
}
}

answer = (count)/(key.length);
return key + "was found " + answer + "times";

}

第二次尝试:

function find(str,key){ 
var count = 0;
var answer = 0;
for (var i = 0; i<str.length; i++){

if (str[i] == key[0] ){

for (var j = i; j<i +str.length; j++){

if (str[j] == key[j-i]){
count = count + 1;
}

if (count == key.length){answer = answer + 1;}
}
}
}
return key + "was found " + answer + "times";
}

我不确定为什么第一个不起作用,我的代码中发生了什么导致答案为 6.3333 而不是 1?

最佳答案

您在第一次尝试时遇到了两个问题,请参阅下面(已修复)代码中的注释

function find(str,key){ 
var count = 0;
var answer = 0;
for (var i = 0; i<str.length; i++){
if (str[i] == key[0] ){
for (var j = i; j<str.length; j++){ // you have to stop at end of "str"!
if (str[j] == key[j-i]){
count = count + 1;
}
else {
break; // no match, you have to restart at beginning of "key"
}
}
}
}

answer = (count)/(key.length);
return key + "was found " + answer + "times";

}

注意,您的第二个版本可能会修复第三个问题(可能是因为其中也有错误)。问题是部分匹配应计为零而不是 n/key.length(@TheGreatContini 的评论中提供了一个示例)。

当我们这样做时,这是对第二个问题的修复

function find(str,key){ 
var count = 0;
var answer = 0;
for (var i = 0; i<str.length; i++){

if (str[i] == key[0] ){

for (var j = i; j<str.length; j++){ // same problem here

if (str[j] == key[j-i]){
count = count + 1;
}
else {
count = 0;
break; // you have to restart
}

if (count == key.length){
count = 0; // a new beginning
answer = answer + 1;
}
}
}
}
return key + "was found " + answer + "times";
}

PS 作为奖励,here是一种更高效的字符串匹配算法 - O(str.length) 而不是 O(str.length*key.length)

关于javascript - 在 JavaScript 中将变量放在 for 循环内部而不是外部有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046874/

25 4 0