无法检测到错误.无限循环发生在哪里?



// JavaScript Document
var person = prompt("GIVE INPUT", "");
var count  = 0;
var array  = person.split(",");
var freq   = [];
var words  = [];
//freq.fill(0);
//words.fill("");
//window.alert(freq[0]);
var i = 0, j = 0;
while (array.length > 0) {
    var temp = array[0];
    while (j < array.length) {
        if (temp == array[j]) {
            count = count + 1;
            array.splice(j, 1);
            //console.log(array);
            j = 0;
        }
        else {
            j = j + 1;
        }
    }
    freq[freq.length]   = count;
    count               = 0;
    words[words.length] = temp;
}
window.alert(freq + "n" + words);

问题是每当我运行它时都会发生无限循环并且没有显示输出,我找不到错误,如果可能的话,请帮助。此代码用于查找输入字符串中单词的频率,其中单词以逗号分隔。谢谢。

你只需要把var i=0,j=0;放在while里!

while(array.length>0)
{var i=0,j=0;

工作小提琴

您在每次迭代时将循环变量 j 重置为 0。此条件if(temp==array[j])永远不会失败,因此 j 始终重置为 0,因此 while(j<array.length) 始终为真。

从内部 While 循环出来后,您需要将j重置为零。由于j的增量值不允许它再次进入内部循环,因此array.length不会减少 我们得到了一个无限循环。

// JavaScript Document
   var person = prompt("GIVE INPUT", "");
   var count=0;
   var array = person.split(",");
   var freq = new Array();
   var words = new Array();
   //freq.fill(0);
   //words.fill("");
   //window.alert(freq[0]);
   var i=0,j=0;
   while(array.length>0)
   {
	   var temp=array[0];
	   while(j<array.length)
	   {
		   if(temp==array[j])
		   {
		   		 count=count+1;
				 array.splice(j,1);
				 //console.log(array);
		   		 j=0;
		   }
		  else
		  {
		  		j=j+1;
		  }
		  
	   }
	   freq[freq.length]=count;
	   count=j=0;
	   words[words.length]=temp; 
   }
   window.alert(freq+"n"+words);

这是 for 对一致性更有用的地方。你可以用这个 for 循环替换内部 while 循环:

for(j=a.length-1; j>=0; j--)
    if(temp==a[j]) {
        count=count+1;
        a.splice(j,1);
    }

尽管如此,计数方法的整体复杂性可以通过地图等数据结构来降低。
脚本的重要部分可以简化为:

var counter = new Map();
for (i in array)
    counter.set(array[i], (counter.get(array[i])||0)+1);
var freq = Array.from(counter.values());
var words = Array.from(counter.keys());

相关内容

  • 没有找到相关文章

最新更新