我为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);