0

我编写的这段代码遇到了一些麻烦,因为我遇到了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;
    }
}

非常感谢!

4

3 回答 3

4

正如错误所暗示的,这是由于访问超出了数组的范围。IE。数组上的一些错误索引访问。

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

您正在创建一个store大小为k-1

k作为大小传递给charN()

charN(numStore, store, k);

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

char[] store = new char[k];

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

static int k = 3;

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

于 2013-01-31T20:13:27.120 回答
1

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

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

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

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

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

将您的数组创建更改为: -

char[] store = new char[k];

此外,我不明白你为什么拿k = 2第一名。可能您的意思是将其用作index,在这种情况下,您的数组创建将是 size k + 1。因此,您的 for 循环将迭代 until k + 1,而不是k.

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

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

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

于 2013-01-31T20:14:23.490 回答
0

根据你的帖子声明

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

导致大小为 1 的 char 数组。因此,在 charN 方法中,当您尝试访问

store[k - 1] = (char) numStore;

您正在尝试访问 store[1],因为此处的“k”为 2。这是错误的。因为使用 store[1] 您正在尝试访问数组中的第二个元素,因为数组大小仅为 1。

于 2013-01-31T20:17:55.660 回答