用于反转数组的程序中的数组索引超出绑定异常

时间:2014-04-12 16:35:38

标签: java arrays

Here is the code to reverse an array

import java.util.*;
class middle {
    public static void main(String args[]){
        int a[]=new int[]{2,3,65,4,7,8,9};
        int c[]=new int[a.length-1];
        int k=0;
        for(int i=a.length;i>0;i++){
            c[k]=a[i];
            k++;
        }

        System.out.println("Reverse of an array");
        for(int i=0;i<c.length;i++)
            System.out.print(c[i]+"   ");
    }
}

运行时给出Array索引超出绑定的异常:7 代码出错的地方?

3 个答案:

答案 0 :(得分:1)

a.length超出了a

的范围
for(int i=a.length;i>0;i++)
{
 c[k]=a[i];
 k++;
}

然后,

int c[]=new int[a.length-1];

你需要相同长度的数组,而不是反向数组的length - 1

答案 1 :(得分:1)

要向后遍历数组,您需要在循环中更改所有三个条件,如下所示:

for(int i=a.length-1;i>=0;i--)
{
 c[k]=a[i];
 k++;
}

让我们分开:

int i=a.length-1;

您必须从a.length-1开始,因为数组使用基于0的索引并且a.length超出范围。

i>=0;

您需要迭代到i>=0,因为i>0会遗漏您阵列中的一个元素。

i--

您需要递减i,因为循环将始终访问越界索引/永远不会终止。

P.S。正如@Jigar所提到的,您需要将c初始化为int c[]=new int[a.length];

答案 2 :(得分:0)

你在这里犯了错误,你需要提到c的数组a.length而不是a.length-1的长度,并且for循环条件中的值应该类似于for(int i=a.length-1;i>=0;i--) i减少。 :修改后的代码在这里:

int a[]=new int[]{2,3,65,4,7,8,9};
int c[]=new int[a.length];

int k=0;
for(int i=a.length-1;i>=0;i--)
{

c[k]=a[i];
k++;

}