public static void reverse(int[] numbers) {
//反转数组
for (int i = 0,j = numbers.length; i < j; i++,j--) {
//交换i和j的值,把后边一个位置的值交给一个临时变量先存起来
int temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
问题:这是一开始写的一段代码,报了错误:exception in thread main java.lang.ArrayIndexoutofbounds exeption:4
先看这个数组反转如何实现?
反转数组时,需要定义一个临时变量temp,定义i和j用来记录数组中的位置。
实现数组反转时,比如numbers[i]里初始记录数组第一个值,numbers[j]里初始记录数组最后一个值,先把数组最后一个数赋值给temp,再将temp的值赋给number[i],此时最后一个数变成了第一个数,然后i++往后走,j--往前走,就可以将数组反转。
出现exception in thread main java.lang.ArrayIndexoutofbounds exeption:4
这是因为for (int i = 0,j = numbers.length; i < j; i++,j--)中出现了错误
我定义的数组长度为4,在数组中,数组下标是从0开始的,也就是numbers[0]是数组里第一个数,numbers[3]是数组里第四个数。但是我把j=numbers.length了,numbers.length=4,这个时候j的初始位置就成了numbers[4]了,就成了第五个数了,但是数组里只有四个数,所以这里j要等于numbers.length-1,就不会报错了
正确代码:
public static void reverse(int[] numbers) {
//反转数组
for (int i = 0,j = numbers.length - 1; i < j; i++,j--) {
//交换i和j的值,把后边一个位置的值交给一个临时变量先存起来
int temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
你学废了吗?
扫描二维码,在手机上阅读
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!