Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Comparator对字符串包含4个数字的字符串列表进行排序_Java_Data Structures_Comparator - Fatal编程技术网

Java 使用Comparator对字符串包含4个数字的字符串列表进行排序

Java 使用Comparator对字符串包含4个数字的字符串列表进行排序,java,data-structures,comparator,Java,Data Structures,Comparator,我试图解决数据结构和算法的4个求和问题,这是极客对极客的要求: 以下是我的解决方案: import java.util.*; import java.lang.*; import java.io.*; class GFG { public static void solve(int[] a,int n,int k) { Arrays.sort(a); HashMap<Integer,List<int[]>> hs

我试图解决数据结构和算法的4个求和问题,这是极客对极客的要求:

以下是我的解决方案:

import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
 {
     public static void solve(int[] a,int n,int k)
     {
         Arrays.sort(a);
         HashMap<Integer,List<int[]>> hs = new HashMap<>();
         HashSet<String> set = new HashSet<>();
         List<String> ss = new ArrayList<>();
         boolean flag=false;
         for(int i=0;i<n-1;i++)
         {
             for(int j=i+1;j<n;j++)
             {
                 int sum = a[i]+a[j];
                 if(hs.containsKey(k-sum))
                 {
                     List<int[]> indexes = hs.get(k-sum);
                      
                    for(int[] index : indexes)
                    {
                        int i1 = index[0];
                        int i2 = index[1];
                        if(i2<i && i1!=i && i1!=j && i2!=i && i2!=j)
                        {
                            
                            String s = new String(""+a[index[0]]+" "+a[index[1]]+" "+a[i]+" "+a[j]+" $");
                            flag=true;
                            if(!set.contains(s))
                                ss.add(s);
                            set.add(s);    
                        }
                    }
                 }
                 List<int[]> temp = hs.getOrDefault(sum,new ArrayList<>());
                 temp.add(new int[]{i,j});
                 hs.put(sum,temp);
             }
         }
         if(!flag)
         System.out.print(-1);
         else
         {
             Collections.sort(ss,(String a1,String b1)->{
                 String[] st1 = a1.split(" ");
                 String[] st2 = b1.split(" ");
                //  if(a1.compareTo(b1)==0)
                //     return 0;
                 for(int i=0;i<st1.length;i++)
                 {
                     if(st1[i].compareTo(st2[i])>0)
                     {
                         return 1;
                     }
                 }
                 return -1;
             });
             for(String s1 : ss)
                System.out.print(s1);
         }
         System.out.println();
     }
     
     
    public static void main (String[] args)
     {
     Scanner sc = new Scanner(System.in);
        int t=sc.nextInt();
        while(t-->0)
        {
            int n = sc.nextInt();
            int k = sc.nextInt();
            int[] a = new int[n];
            for(int i=0;i<n;i++)
                a[i]=sc.nextInt();
            solve(a,n,k);
        }
     }
}
请帮忙


谢谢

在实现
比较器
(在
Collections.sort()
中使用lambda表达式)时,必须遵循一些规则。一条规则是,如果第一个元素必须在第二个元素之前,则竞赛者必须返回
-1
,如果第一个元素必须在第二个元素之后,则必须返回
1
,如果它们可以以任何顺序出现,则必须返回
0
。由于未返回
0
,因此违反了此规则


您的实现违反的第二个规则是
compare()
方法必须是可传递的,这意味着如果
compare(A,B)==0
compare(B,C)==0
,那么
compare(A,C)==0
。排序算法可能依赖于该规则为真,这可能是您看到的
IllegalArgumentException
的原因。有关如何正确实现比较器的更多详细信息,请检查。

如果可能,请提供比较器方法的实现,
Runtime Error:
Runtime ErrorException in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.base/java.util.TimSort.mergeLo(TimSort.java:781)
    at java.base/java.util.TimSort.mergeAt(TimSort.java:518)
    at java.base/java.util.TimSort.mergeCollapse(TimSort.java:448)
    at java.base/java.util.TimSort.sort(TimSort.java:245)
    at java.base/java.util.Arrays.sort(Arrays.java:1515)
    at java.base/java.util.ArrayList.sort(ArrayList.java:1749)
    at java.base/java.util.Collections.sort(Collections.java:179)
    at GFG.solve(File.java:46)
    at GFG.main(File.java:78)