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

时间:2017-06-29 13:52:47

标签: javascript

// 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);

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您只需将var i=0,j=0;放在while

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

Working fidddle

答案 2 :(得分:0)

退出内部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);

答案 3 :(得分:0)

对于一致性更有用。您可以通过 for 循环替换内部 while 循环:

webBrowser1.Document.Body.OuterHtml

然而,使用数据结构(如地图)可以减少计数方法的整体复杂性 您脚本的基本部分可以简化为:

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