我编写的这段代码遇到了一些问题,因为我遇到了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;
}
}
非常感谢!
答案 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。