我在创建反向排序数组时遇到问题。这是我写的代码:
public static int[] makeReverse(int number) {
int[] rorder = new int[number];
int j = rorder.length;
for (int i = 0; i < rorder.length-1; i++) {
rorder[j] = i;
j--;
}
return rorder;
但是当我尝试运行它时出现java.lang.ArrayIndexOutOfBoundsException
错误。我找不到错误。
答案 0 :(得分:2)
您可以将j
初始化为rorder.length
,然后访问rorder[j]
。这显然是不可能的。您无法访问索引arr.length
。将j
更改为rorder.length - 1
将解决此异常。
即使异常得到解决,您所做的并不是反转数组。你只是将数字从rorder.length - 2
填充到0
从第一个索引到第二个索引(我说最后一个,b&#39;因为你的循环只迭代到最后一个索引)。
你应该做的是,迭代到数组长度的一半,并从头开始交换元素:
for (int i = 0; i < arr.length / 2; ++i) {
// swap arr[i] with arr[arr.length - i - 1]
}
答案 1 :(得分:1)
引用this post您可以使用ArrayUtils:
使用Commons.Lang,您只需使用
即可ArrayUtils.reverse(int[] array)
大多数情况下,轻松坚持下来更快,更安全 可用的库已经过单元测试和用户测试 照顾你的问题。
答案 2 :(得分:1)
试试这个,将你的号码作为输入参数传递
int[] reverse(int input){
int[] reverse = new int[input];
int x = 0;
for(int i = input; i>0; i--){
reverse[x] = i;
x++;
}
return reverse;
}
它会生成从int
到input
1
数组
答案 3 :(得分:0)
在你的方法中,你必须改变这一行:
int j = rorder.length;
到
int j = rorder.length-1;
因为rorder.length
将返回数组的大小,但最大数组索引比数组大小小1(因为数组索引从0开始)。
答案 4 :(得分:0)
假设使用makeReverse(5)
调用此方法,您将创建长度为rorder
的{{1}}。
使用索引5
,您可以0,1,2,3,4 (remember arrays start at 0)
。
然后,在你的for循环的第一行,你调用j = rorder.length (with is the same as number which is 5)
,它不存在。
答案 5 :(得分:0)
你可以这样做:
public static void main(final String[] args) {
final int[] rorder = makeReverse(6);
System.out.println(Arrays.toString(rorder));
}
public static int[] makeReverse(final int number) {
final int[] rorder = new int[number];
for (int i = number; --i > 0;) {
rorder[i % number] = i;
}
return rorder;
}
输出:
[0, 1, 2, 3, 4, 5]
答案 6 :(得分:0)
更改
int j = rorder.length;
for (int i = 0; i < rorder.length-1; i++) {
到
int j = rorder.length - 1; //Comment 1
for (int i = 0; i < rorder.length; i++) { //comment 2
否则在第一次迭代时将分配给j [4] - 最大值为j [3]。
for循环在代码中进行的迭代次数太少,例如,如果“number”为5,“j”将递减为0但是循环将退出,因此rorder [0]将不会分配值为4。