class arr{
//array sorting to find maximum value
public static void main(String[]args){
int[] array={1,6,4,5,2};
int n;
int i,j;
for( i=0;i<(array.length*2);i++){
for( j=0;j<array.length;j++){
if(array[j]>array[j+1]){
array[j]=array[j+1];
array[j+1]=array[j];
}
}
}
System.out.println(array[array.length]);
}
}
&GT; 任何人都可以告诉我为什么我会收到运行时错误,这种排序方法是否有效?
答案 0 :(得分:2)
不要重新发明轮子..,你可以使用数组,所以然后使用数组帮助类... : - )
public static void main(String[] args) {
final int[] array = { 1, 6, 4, 5, 2 };
System.out.println("Array before sort " + Arrays.toString(array));
Arrays.sort(array);
System.out.println("Array before sort " + Arrays.toString(array));
}
答案 1 :(得分:0)
您可能会遇到indexOutOfbounds
异常,因为您的第二个循环:
for( j=0;j<array.length;j++){
if(array[j]>array[j+1]){
array[j]=array[j+1];
array[j+1]=array[j];
}
}
J
遍历teh数组然后你试图在J + 1
索引数组,该数组在数组的最后一个元素上将它推出边界,从而抛出outOfBoundsException
答案 2 :(得分:0)
for( j=0;j<array.length;j++){
if(array[j]>array[j+1]){
array[j]=array[j+1];
array[j+1]=array[j];
}
}
由于array.length = 5且j&lt; array.length,内部循环的最后一轮中的值数组[j + 1]导致数组超出绑定异常。
在更改之前,交换需要另一个变量来保存数组[j]。
e.g:
int x;
for( j=0;j<array.length - 1;j++){
if(array[j]>array[j+1]){
x = array[j];
array[j]=array[j+1];
array[j+1]=x;
}
}
答案 3 :(得分:0)
冒泡排序算法可以按如下方式实现
public static void sort(int[] arr){
int len = arr.length;
int k = 0;
for(int j = 0 ; j < len-1; j++){
for(int i= 0+k; i < len-1; i += 2){
if(arr[i] <= arr[i+1])
continue;
int tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
k++;
if ( k % 2 == 0)
k = 0;
} }
内循环必须交替从索引0和1开始,以便不总是交换相同的对(k变量)。
其他人已经指出了你为什么会有例外。