A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘迪海 中级黑马   /  2013-4-4 13:23  /  1616 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

调试下面程序出现了死循环 什么原因  
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;
               

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 郑丹丹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循环。造成死循环。
建议:调试时可以打个断点。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张振 于 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值 更挑不出去了
希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
楼上的讲解非常霸气。
回复 使用道具 举报
张文 发表于 2013-4-4 21:16
楼上的讲解非常霸气。

谢谢···:lol
我会再接再厉的
回复 使用道具 举报
            //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);
            //    }
            //}

我是这么写的. 供参拷.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马