使用以引用为参数的交换函数进行冒泡排序,得到运行时错误



我为bubble排序写了一个简单的代码,并使用了一个接受对象引用作为参数的交换函数。我得到以下错误:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Main.main(Main.java:6)

我的代码:

import java.util.Scanner;   
public class Bubble {   
public static void main(String[] args){   
Scanner scan = new Scanner(System.in);    
int n= scan.nextInt();   
int[] arr = new int[n];   
for(int i = 0; i<n ; i++){  
arr[i] = scan.nextInt();   
}  
bubbleSort(arr);  
for(int i = 0; i<n ; i++){  
System.out.print(arr[i]+"");  
}   
}  
static int[] bubbleSort(int[] arr){
int swapped = 1;
while(swapped!= 0){
swapped = 0;
for(int i=1; i< arr.length; i++){
if(arr[i-1]>arr[i]){
Example a = new Example(arr[i-1]);
Example b = new Example(arr[i]);
swap(a,b);
swapped++;
}
}
}
return arr;
}
static void swap(Example a, Example b){
Example temp = new Example(0) ;
temp.a = a.a;
a.a = b.a;
b.a= temp.a;
}
}
class Example{
int a ;
public Example(int a){
this.a = a;
}
}

我如何才能发现这些错误,为什么会出现这些错误?

您使用Example所做的操作将不起作用。当你做

Example a = new Example(arr[i-1]);

您的Example a仅包含arr[i-1]。更改a.a对数组没有影响。所以你的数组永远不会被排序,你有一个无限循环。

如果希望方法交换数组中的元素,最简单的方法是将数组传递给该方法。

static void swap(int[] arr, i, j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

然后你可以用交换元素

swap(arr, i-1, i);

最新更新