黑马程序员技术交流社区

标题: 索引超出了数组界限 [打印本页]

作者: 杨深    时间: 2012-11-26 15:38
标题: 索引超出了数组界限
  1.             //定义字符串
  2.             Console.WriteLine("输入字符串");
  3.             string s = Console.ReadLine();
  4.             char[] str = s.ToCharArray();
  5.             for (int i = 0; i < str.Length; i++)//遍历
  6.             {
  7.                 if (str[i] == 'e')
  8.                 {
  9.                     Console.WriteLine("字符串的第{0}位出现e", i);
  10.                 }
  11.             }
  12.             Console.ReadKey();
复制代码
按照代码输出的话总是少一位,比如本来是第二位出现的,却输出是第一位,所以我写成 Console.WriteLine("字符串的第{0}位出现e", i+1);,不知道的上面截图的错误出在哪?

作者: 韩俊    时间: 2012-11-26 16:30
下标(索引):为str[0],str[1],str[2],str[3]索引是从0开始的 ,当你("字符串的第{0}位出现e", i)写成i时,这时你的i值为4,str[4]是不存在的
作者: 吴瑞祥    时间: 2012-11-26 16:33
图片里的错误,是for里判断句直接用小于长度就行,跟你后面遇到的问题是一个原因,
数组下标是从0开始的,
作者: 陈辉    时间: 2012-11-26 16:34
1、数组的下标是从0开始的,但是是不能取到str.Length,在你的截图中当i取str.Length时就会引发异常
2、将for (int i =1; i < =str.Length; i++)这句代码改成for (int i = 0; i < str.Length; i++)就可以了

作者: 王斌    时间: 2012-11-26 17:04
取数组元素前先判断当前index是否大于等于数组的length即可
作者: 黑马-项泽宇    时间: 2012-11-26 18:00
怎么能犯基础错误{:2_38:}
数组下标是从0开始的,你应该写for(int i=0;i<str.Length;i++)
另外,str.length 推荐写到for循环前面,这样可以提高效率。
比如:
  1. int len = str.Length;
  2. for(int i=0;i<len;i++)
  3. {
  4.     代码块。。。。
  5. }
复制代码

作者: 黑马-张扬    时间: 2012-11-27 17:40
黑马-项泽宇 发表于 2012-11-26 18:00
怎么能犯基础错误
数组下标是从0开始的,你应该写for(int i=0;i

对,len放到外面确实提高效率
作者: 曾玉锋    时间: 2012-11-27 21:54
for循环的判断条件多了一个=号,下面的就没问题。




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