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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sun~~ 中级黑马   /  2012-7-30 22:08  /  4674 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class  shuzu
  2. {
  3.         //数组的输出 遍历练习
  4.         public static void array(int[] arr)
  5.         {
  6.         System.out.print("[");
  7.         for (int x=0;x<=arr.length ;x++ )
  8.         {
  9.                 if (x!=arr.length-1)
  10.                
  11.                         System.out.print(arr[x]+", ");
  12.                         else
  13.                         System.out.print(arr[x]+"]");
  14.                
  15.         }
  16.         }
  17.         public static void main(String[] args)
  18.         {
  19.                 int[] arr={4,5,2,6,7,8,9};
  20.                 array(arr);
  21.         }
  22. }
  23. [img]c:\users\hp\Dexktop[/img]
复制代码
打印输出是出现数组异常这是什么问题呀?

17 个回复

倒序浏览
数组能打印出来可以就是出现
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:7
at shuzu.array<shuzu.java:11>
ar shuzu.main<shuzu..java:20>
求解答!
回复 使用道具 举报
本帖最后由 郑正华 于 2012-7-30 22:24 编辑

这个必须有问题呀,7行的for循环:for (int x=0;x<=arr.length ;x++ )   改成 x<arr.length,或者是 x<=arr.length-1;
因为数组的角标是从0开始的,你代码里的数组长度是7,当for循环执行到x=7的时候,你觉得数组有arr[7]这个元素么!所以程序抛出了个角标越界的异常!
int[] arr={4,5,2,6,7,8,9};
int[0] = 4,  int[6] = 9 ,
回复 使用道具 举报
class  shuzu
{
        //数组的输出 遍历练习
        public static void array(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]+"]");
               
        }
        }
        public static void main(String[] args)
        {
                int[] arr={4,5,2,6,7,8,9};
                array(arr);
        }
}
这个是角标越界异常,数组的角标,最大值是arr.length-1,你用的是x<=arr.length,数组没有此异常,就会提示Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:7
将其改为x<arr.length就可以了

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
[4, 5, 2, 6, 7, 8, 9, Exception in thread "main" java.lang.ArrayIndexOutOfBounds
Exception: 7
        at shuzu.array(shuzu.java:14)
        at shuzu.main(shuzu.java:22)


.ArrayIndexOutOfBoundsException: 7  7行数组角标超出异常

第7行for (int x=0;x<=arr.length ;x++ )  
arr,length 应改成 arr.length-1,这样数组角标就匹配了

回复 使用道具 举报
class  Su

{

     //数组的输出 遍历练习

   public static void array(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]+"]");


        }

        }

       public static void main(String[] args)

        {

               int[] arr={4,5,2,6,7,8,9};

                array(arr);

       }

}
这样就对啦,数组的长度应该是从零开始所以这里x<arr.length;才对。
回复 使用道具 举报
金龙 中级黑马 2012-7-30 22:39:53
7#
for (int x=0;x<=arr.length ;x++ ),一上来都没看题,就知道你肯定出问题了,x最多去到长度-1,就是最后一个元素,把等号去掉就行了
回复 使用道具 举报
高薇 中级黑马 2012-7-30 22:51:25
8#
看到这个错误,首先想到索引越界呀
回复 使用道具 举报
高薇 中级黑马 2012-7-30 22:57:02
9#
class  shuzu

{

        //数组的输出 遍历练习

        public static void array(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]+"]");

               
        }

        }

        public static void main(String[] args)
        {

                int[] arr={4,5,2,6,7,8,9};

                array(arr);

        }

}

c:\users\hp\Dexktop
你这里有一个很明显的错误:
for(int i=0;i<=arr.length;i++)中为什么i的循环判断条件要定为i<=arr.length呢?
这里的i指的是数组中的角标,根据角标来循环遍历每一个元素,如果i=arr.length,如何能找到这个元素呢?
因为角标都是从0开始的。
所以才会报这个错误。
回复 使用道具 举报
class  shuzu
{
        //数组的输出 遍历练习
        public static void array(int[] arr)
        {
        System.out.print("[");
        for (int x=0;x<=arr.length ;x++ )   
这里条件要弄成x<arr.length,length获取的是数组长度,而数组角标是从0开始的,所以你x=arr.length,就角标越界了
回复 使用道具 举报
本帖最后由 j39554 于 2012-7-31 11:11 编辑


最后少打了个等号,是x<=arr.length-1
回复 使用道具 举报
class  shuzu

{

        //数组的输出 遍历练习

        public static void array(int[] arr)

        {

        System.out.print("[");
       /*
          数组越界异常
           数组arr的下标取值范围为0到arr.length-1
           应将循环条件x<=arr.length-1或x<arr.length
       */
        for (int x=0;x<arr.length ;x++ )

        {

                if (x!=arr.length-1)

               

                        System.out.print(arr[x]+", ");

                        else

                        System.out.print(arr[x]+"]");

               

        }

        }

        public static void main(String[] args)

        {

                int[] arr={4,5,2,6,7,8,9};

                array(arr);

        }

}
回复 使用道具 举报
x<=arr.length   
for循环中这句布尔表达式出了问题,多遍历了一次,因为数组下标是从0开始的,最后一个的下标是length-1,所以报了个数组下标越界的异常
总的来说,数组下标是从0开始的,所以最后一个的下标是length-1
而数组的length的属性是从1开始计算的
回复 使用道具 举报
x <= arr.length 要改为 x < arr.length,
因为数组的下标是从0开始的,
所以如果一个数组长度为5,那么它的最大下标就是4,遍历时,就只能到4
for (int x=0; x <= arr.length ; x++ ) --->
for (int x=0; x < arr.length ; x++ )
回复 使用道具 举报
楼主 怎么复制出这样带行号的代码的?
回复 使用道具 举报
  • class  shuzu
  • {
  •            //数组的输出 遍历练习
  •         public static void array(int[] arr)
  •         {
  •                 System.out.print("[");
  •                 //for (int x=0;x<=arr.length ;x++ )  // arr.length是数组长度,arr.length-1 是才是数组的最后一个元素
                   for(int x=0; x<arr.length ; x++)    //你写的那个之所以出错是因为角标越界了!ArrayIndexOutOfBoundsException
  •                {
  •                         if (x!=arr.length-1)
  •                                System.out.print(arr[x]+", ");
  •                         else
  •                                System.out.print(arr[x]+"]");
  •                  }
  •         }
  •         public static void main(String[] args)
  •         {
  •                 int[] arr={4,5,2,6,7,8,9};
  •                 array(arr);
  •         }
  • }
回复 使用道具 举报
  1. class  shuzu

  2. {

  3.         //数组的输出 遍历练习

  4.         public static void array(int[] arr)

  5.         {

  6.         System.out.print("[");

  7.         for (int x=0;x<arr.length ;x++ )

  8.         {

  9.                 if (x!=arr.length-1)

  10.                

  11.                         System.out.print(arr[x]+", ");

  12.                         else

  13.                         System.out.print(arr[x]+"]");

  14.                

  15.         }

  16.         }

  17.         public static void main(String[] args)

  18.         {

  19.                 int[] arr={4,5,2,6,7,8,9};

  20.                 array(arr);

  21.         }

  22. }
复制代码

111.jpg (11.6 KB, 下载次数: 216)

111.jpg
回复 使用道具 举报
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
这句话的意思是MAIN主线程 出错
原因是 数组越界错误
细节上面说的很清楚了,如果发生异常的话,可以试着自己找出错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马