黑马程序员技术交流社区

标题: 问下大神,看看下面代码什么问题,为什么会出现索引越界 [打印本页]

作者: hxh362805079    时间: 2015-12-11 22:13
标题: 问下大神,看看下面代码什么问题,为什么会出现索引越界
class Test
{
        public static void main(String[] args)
        {                int[] arr={3,5,7,9};
                  printA(arr);
                System.out.println("Hello World!");
        }
public static int printA(int[] arr){
        int i=0;
                for (i=0;i<arr.length ;i++ ){
                        System.out.print(arr[i]);
                }
                    return arr[i];
        }
}

作者: sky123    时间: 2015-12-11 22:50
  for (i=0;i<arr.length ;i++ ){
                        System.out.print(arr[i]);
                }
这段代码结束时候,i = 4;
而 return arr[i];
即 return arr[4];
所以报错
作者: ToSina    时间: 2015-12-11 23:25
加油 加油 加油  加油
作者: 水瓶座    时间: 2015-12-11 23:46
hxh362805079 发表于 2015-12-11 22:13
class Test
{
        public static void main(String[] args)

同意楼上回复!
作者: 王帅---    时间: 2015-12-12 10:14
数组从0开始计数
调用.length时总长,从1开始计数
作者: 小鹿    时间: 2015-12-12 21:03
你看看你那代码写的!!!           arr【i】;  寄是这个原因!
作者: 窃贼    时间: 2015-12-12 21:45
注释掉return语句,返回值改成void就好了
作者: LSD-ZWH    时间: 2015-12-12 22:33
你把长度length-1这样就行了,因为你的数组长度是4,数组的索引是从0开始的,你不减1的话你的索引值i会到4,也就是说你的索引是0,1,2,3,4,这样你的数组长度就是5了,你减1就好了
作者: river1205    时间: 2015-12-12 22:51
public class Test {
        public static void main(String[] args) {
                int[] arr = { 3, 5, 7, 9 };
                printA(arr);
                System.out.println("Hello World!");
        }

        public static void printA(int[] arr) {
                for (int i = 0;i < arr.length; i++) {
                        System.out.print(arr[i]);
                }
        }
}

你的代码写的不伦不类,打印方法不用定义返回值,功能实现的。而且你返回的是arr[i];但是i在最后i++ 变成了4;所以就越界了

作者: river1205    时间: 2015-12-12 22:53
sky123 发表于 2015-12-11 22:50
for (i=0;i

我也是这么认为的,感觉就是这样导致了数组越界了!




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