今天学习java冒泡排序,代码写好了之后跑起来出现一个错误。
先上代码
package cn.tianzheng.array2;
import java.util.Arrays;
/**
* 测试冒泡排序
*/
public class TestBubbleSort {
public static void main(String[] args){
int[] values = {3,1,6,2,9,0,7,4,5,8};
int temp = 0;
for (int i = 0; i < values.length; i++){
for (int j = 0; j < values.length - i; j++){
if(values[j] > values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(values));
/*
for (int i = 0; i < values.length; i++){
System.out.println(values[i]);
}
*/
}
}
代码写好之后运行报错
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at cn.tianzheng.array2.TestBubbleSort.main(TestBubbleSort.java:18)
上网查了一下,发现是数组越界错误,仔细检查了一下代码,发现
if(values[j] > values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
我定义的数组长度为10,数组下标就是0~9,而这里的if语句,当比较到j=9时,会出现values[9] > values[10],但values[10]不存在,因此报错。
正确代码:(将第一个for循环中的i变量初值设为1)
package cn.tianzheng.array2;
import java.util.Arrays;
/**
* 测试冒泡排序
*/
public class TestBubbleSort {
public static void main(String[] args){
int[] values = {3,1,6,2,9,0,7,4,5,8};
int temp = 0;
for (int i = 1; i < values.length; i++){
for (int j = 0; j < values.length - i; j++){
if(values[j] > values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(values));
/*
for (int i = 0; i < values.length; i++){
System.out.println(values[i]);
}
*/
}
}