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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这段代码编译没问题,但是运行却报错了,可是我又看不懂这报错是什么意思。。。。代码:class ArrayTools {       
        private ArrayTools(){}
        //遍历数组
        public static void printArr(int[] arr){
                System.out.print("[");
                for(int x = 0;x<arr.length;x++){
                        if(x==arr.length-1){
                                System.out.print(arr[x]);
                        }else{
                                System.out.print(arr[x]+", ");
                        }
                }
                System.out.println("]");
        }
        //求最大元素
        public static int getMax(int[] arr){
                int max = arr[0];

                for(int x = 1;x<arr.length;x++){
                        if (arr[x]>arr[max]){
                                max = arr[x];
                        }
                }return max;
        }
        //求索引
        public static int getIndex(int[] arr,int value){
                        int index = -1;
                        for (int x = 0;x<arr.length;x++ ){
                                if(arr[x]==value){
                                        index = x;
                                        break;
                                }
                        }return index;
        }
}
class ArrayDemo {
        public static void main(String[] args){
                int[] arr = {11,44,55,22,66};
                //ArrayTools at = new ArrayTools();
                //at.printArr(arr);
                ArrayTools.printArr(arr);
                int max = ArrayTools.getMax(arr);
                System.out.println(max);
                int index = ArrayTools.getIndex(arr,22);
                System.out.println(index);
        }
}

报错:[11, 44, 55, 22, 66]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
        at ArrayTools.getMax(ArrayTools.java:21)
        at ArrayDemo.main(ArrayDemo.java:7)
请按任意键继续...

评分

参与人数 1黑马币 +6 收起 理由
fantacyleo + 6 提问加分

查看全部评分

2 个回复

倒序浏览
出错原因是数组下标越界。问题出在getMax方法中, max到底是最大元素还是最大元素的下标?从   int max = arr[0];来看,似乎max代表最大元素。可从arr[x]>arr[max]看,max又代表最大元素的下标。这一逻辑上矛盾的设定导致了运行错误

评分

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

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2015-2-27 16:08
出错原因是数组下标越界。问题出在getMax方法中, max到底是最大元素还是最大元素的下标?从   int max = a ...

哦,原来是这样啊,嘿嘿,谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马