黑马程序员技术交流社区

标题: 调试程序中出现死循环谁帮我看下 [打印本页]

作者: 潘迪海    时间: 2013-4-4 13:23
标题: 调试程序中出现死循环谁帮我看下
调试下面程序出现了死循环 什么原因  
int cishu = 0;
            string str = "Welcome to Chinaworld",str1="";
            str=str.ToLower();
            string[] words = str.Split(' ');
            for (int i = 0; i < words.Length; i++)
            {
                str1 += words[i];
            }
            for (int i = 0; i < str1.Length; i++)
            {
                int j = 0;
                while(str1.IndexOf(str1[i],j)!= -1)
                {
                    cishu++;
                    j = str1.IndexOf(str1[i])+1;
                }
                Console.WriteLine("{0} {1}",str1[i],cishu);
                cishu = 0;
               
作者: 郑丹丹1990    时间: 2013-4-4 18:55
本帖最后由 郑丹丹1990 于 2013-4-4 19:01 编辑

问题出在while循环中。
i j取值:i=0,j=0或1,
str1.IndexOf(str1[0],0)=0(执行一次)
str1.IndexOf(str1[1],1)=14(执行N次,此时i=1,j=1不会再变化了)

造成跳不出while循环。造成死循环。
建议:调试时可以打个断点。

作者: 张振    时间: 2013-4-4 20:21
本帖最后由 张振 于 2013-4-4 20:23 编辑

  while(str1.IndexOf(str1,j)!= -1)
                {
                    cishu++;
                    j = str1.IndexOf(str1)+1;
                }
其实你可以仔细看看while循环
while循环你的判断条件说白了 等同于true 完全就挑不出来了
while()//while循环在执行循环语句 它是先判断条件 再去循环,然后你的条件成立进入循环
{
}
其中 当第一次进入while循环后,你的J值为1,然后再判断条件,条件成立又进入循环,J的值还是1 你的J值永远都是1 所以无限次循环下去 跳不出while循环了

补充点:由于一开始就没跳出循环 所以I=0 一直都是0值 更挑不出去了
希望对你有帮助
作者: 张文    时间: 2013-4-4 21:16
楼上的讲解非常霸气。
作者: 张振    时间: 2013-4-4 22:37
张文 发表于 2013-4-4 21:16
楼上的讲解非常霸气。

谢谢···:lol
我会再接再厉的
作者: 蒋盛舒    时间: 2013-4-5 16:09
            //str = "Welcome to Chinaworld w w";
            //string word = str.ToLower();
            //int numbers = 0;
            //for (int i = 0; i < word.Length; i++)
            //{
            //    if (word[0]==word[i])
            //    {
            //        numbers++;
            //    }
            //    if (i == word.Length-1)
            //    {
            //        Console.WriteLine("{0}出现的次数{1}", word[0], numbers);
            //    }
            //}

我是这么写的. 供参拷.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2