我不确定出了什么问题。 我查阅了其他类似标题的问题和答案堆栈溢出,但不确定我的方法有什么问题。我是一个初学者在Java,所以任何帮助都是很好的。谢谢。
我的代码是
import java.util.*;
class LargestNumber {
static void printLargest(Vector<String> arr){
Collections.sort(arr, new Comparator<String>(){
@Override
public int compare(String X, String Y) {
String XY=X + Y;
String YX=Y + X;
return XY.compareTo(YX) > 0 ? -1:1;
}
});
Iterator it = arr.iterator();
while(it.hasNext())
System.out.print(it.next());
}
public static void main (String[] args) {
Scanner s=new Scanner(System.in);
int i,n;
n=s.nextInt();
Vector<String> arr;
arr = new Vector<>();
for(i=0;i<n;i++){
arr.add(s.next());
}
printLargest(arr);
}
}
错误:
100
2 8 2 3 6 4 1 1 10 6 3 3 6 1 3 8 4 6 1 10 8 4 10 4 1 3 2 3 2 6 1 5 2 9 8 5 10 8 7 9 6 4 2 6 3 8 8 9 8 2 9 10 3 10 7 5 7 1 7 5 1 4 7 6 1 10 5 4 8 4 2 7 8 1 1 7 4 1 1 9 8 6 5 9 9 3 7 6 3 10 8 10 7 2 5 1 1 9 9 5
Your output:
Your stderr:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:777)
at java.util.TimSort.mergeAt(TimSort.java:514)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.Vector.sort(Vector.java:1345)
at java.util.Collections.sort(Collections.java:177)
at LargestNumber.printLargest(LargestNumber.java:6)
at LargestNumber.main(LargestNumber.java:32)
Correct output:
9999999998888888888887777777776666666666555555554444444443333333333222222222111111111111111101010101010101010
(Time used: 0.12/1.50, memory used: 23568384/536870912.)`enter code here`
发生的是你要进入
2 8 2 3 6 4 1 1 10 6 3 3 6 1 1 1 1 6 6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
带空格。 当发生这种情况时,输入将被视为一个没有另一个字符串可供比较的字符串,这就是为什么您得到了IllegalArgumentException。 要修复此代码,请在main方法中更改for循环,如下所示。。。
for(i=0;i<n;i++){
arr.add(String.valueOf(new Random().nextInt(17)));
}
问题是您的语句xy.compareto(YX)>; 0? -1:1
两个变量相等时不返回0,这是IllegalArgumentException:比较方法违反了它的一般约定!
来自Doc:
参数:
O1-要比较的第一个对象。
o2-要比较的第二个对象。
返回:当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
使用以下代码进行比较:
arr.sort((X, Y) -> {
String XY = X + Y;
String YX = Y + X;
return XY.compareTo(YX);
});