黑马程序员技术交流社区
标题:
调试程序中出现死循环谁帮我看下
[打印本页]
作者:
潘迪海
时间:
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