数组索引超出范围错误

时间:2013-01-31 20:10:49

标签: java

我编写的这段代码遇到了一些问题,因为我遇到了ArrayIndexOutofBounds异常错误,我不知道发生了什么。我希望我的代码生成的是一个char数组。

以下是代码:

public class testing {

    static int k = 2;

    public static void main(String args[]) {

        int[] numArr = new int[] { 15, 18, 21 };

        createChar(numArr, k);
    }

    public static char[] createChar(int numArr[], int k) {
        char[] store = new char[k - 1];

        for (int i = 0; i < k; i++) {
            int divide = numArr[i] / 4;

            int numStore = divide % 4;
            charN(numStore, store, k);
        }
        return store;
    }

    public static char[] charN(int numStore, char store[], int k) {
        for (int i = 0; i < k; i++) {
            if (k == 0) {
            } else {
                store[k - 1] = (char) numStore;
                k = k - 1;
            }
        }
        System.out.print(store);
        return store;
    }
}

非常感谢!

3 个答案:

答案 0 :(得分:4)

正如错误所示,这是由于访问数组边界之外的。即。数组上的一些错误索引访问。

char[] store = new char[k - 1];

您正在创建一个大小为store

k-1字符数组

并将k的大小传递给charN()

charN(numStore, store, k);

解决您的问题。 更改商店声明如下

char[] store = new char[k];

此外,在class Testing中,k必须是3,而不是2.其中k是数组的大小。

static int k = 3;

当数组的大小为k时,数组的索引0运行到k-1

答案 1 :(得分:1)

对于值k = 2,以下语句: -

char[] store = new char[k - 1];

创建一个大小为1的数组。因此,您只能访问其0th index

但是,在charN方法中,您正在访问它的1st索引: -

store[k - 1] = (char) numStore;  // Since k = 2, k - 1 = 1.

将阵列创建更改为: -

char[] store = new char[k];

此外,我不明白为什么你把k = 2放在首位。可能意味着它被用作index,在这种情况下,您的数组创建大小为k + 1。因此,您的for循环将迭代到k + 1,而不是k

另外,我不了解您的charN方法的作用。事实上,首先你在createChar方法中迭代你的数组,然后将每个元素传递给charN方法,这似乎很奇怪。然后你也在迭代char array,为多个索引分配相同的值。除此之外,您在循环中同时递减k并递增i。这真的很奇怪。最后,您将从两种方法返回array,但根本不使用返回值。

很难理解你想做什么。但是你应该考虑我在前一段中陈述的所有要点。对于那里的每一步,想想你为什么要这样做?有没有其他选择,这可能很容易?那么,我真的需要在这里进行2次迭代的方法吗?

我建议你再看看你的设计。我上面发布的解决方案可能会解决您的compiler error,但您的logic存在问题。你需要照顾它。

答案 2 :(得分:0)

根据你的帖子声明

char[] store = new char[k - 1];   

导致大小为1的char数组。 所以在尝试访问

时使用charN方法
store[k - 1] = (char) numStore;

你正试图访问商店[1],因为'k'在这里是2。哪个错了。因为对于store [1],你试图访问数组中的第二个元素,因为数组大小只有1。