黑马程序员技术交流社区

标题: 数组遍历问题 [打印本页]

作者: sun~~    时间: 2012-7-30 22:08
标题: 数组遍历问题
  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]
复制代码
打印输出是出现数组异常这是什么问题呀?

作者: sun~~    时间: 2012-7-30 22:13
数组能打印出来可以就是出现
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:7
at shuzu.array<shuzu.java:11>
ar shuzu.main<shuzu..java:20>
求解答!
作者: 郑正华    时间: 2012-7-30 22:19
本帖最后由 郑正华 于 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 ,
作者: 赵方明    时间: 2012-7-30 22:20
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就可以了
作者: 马振兴    时间: 2012-7-30 22:27
[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,这样数组角标就匹配了


作者: 贾成龙    时间: 2012-7-30 22:30
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
for (int x=0;x<=arr.length ;x++ ),一上来都没看题,就知道你肯定出问题了,x最多去到长度-1,就是最后一个元素,把等号去掉就行了
作者: 高薇    时间: 2012-7-30 22:51
看到这个错误,首先想到索引越界呀
作者: 高薇    时间: 2012-7-30 22:57
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开始的。
所以才会报这个错误。
作者: zhaosenyang    时间: 2012-7-30 23:11
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,就角标越界了
作者: 贾林栋    时间: 2012-7-31 00:02
本帖最后由 j39554 于 2012-7-31 11:11 编辑


最后少打了个等号,是x<=arr.length-1
作者: 曹晓涵    时间: 2012-7-31 00:20
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);

        }

}
作者: 余明辉    时间: 2012-7-31 00:27
x<=arr.length   
for循环中这句布尔表达式出了问题,多遍历了一次,因为数组下标是从0开始的,最后一个的下标是length-1,所以报了个数组下标越界的异常
总的来说,数组下标是从0开始的,所以最后一个的下标是length-1
而数组的length的属性是从1开始计算的
作者: 王志明    时间: 2012-7-31 01:59
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++ )
作者: 游兴钟    时间: 2012-7-31 13:35
楼主 怎么复制出这样带行号的代码的?
作者: 梁健生    时间: 2012-7-31 14:36

作者: 陈红建    时间: 2012-7-31 15:01
  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, 下载次数: 213)

111.jpg

作者: 刘真    时间: 2012-7-31 15:13
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
这句话的意思是MAIN主线程 出错
原因是 数组越界错误
细节上面说的很清楚了,如果发生异常的话,可以试着自己找出错误




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