java - 在 Java 中对数组列表进行排序时无法转换为类错误

标签 java collections

我试图向对象数组列表中添加一个数字,但不断收到“无法转换”错误。

我对 Java 还很陌生,所以请放轻松

我的代码如下,任何帮助将不胜感激。如果有任何问题请联系我

public class runningClass {

    public class Sortbymake implements Comparator<runningClass> 
    { 
        @Override
        public int compare(runningClass a, runningClass b) 
        { 
            return b.numb.compareTo(a.numb);
        }
    }

    private String numb;

    public runningClass(String nNumb)
    {
        this.numb = nNumb;
    }

    public String getNumber(){
        return numb;
    }

    public void oof()
    {
        Scanner scan = new Scanner(System.in);
        while(ptr <= 5)
        {
            System.out.println("What number do you want to add");
            System.out.println("Ptr = "+ptr);
            this.numb = scan.next();
            numberList.add(new runningClass(this.numb));
            ptr++;
        }
        Collections.sort(numberList, null);
    }

    public void searchList()
    {
        int Sptr = 0;
        Scanner scan = new Scanner(System.in);
        System.out.println("What is the number your searching for?");
        String userSearch = scan.next();
        for(int u = 0; u < numberList.size();u++)
        {
            //loop is created, will check if any index contains the entered text
            if(numberList.get(Sptr).getNumber().contains(userSearch))
            {
                System.out.println("The "+userSearch+" is located at index "+u);
                break;
            }
            else
            {
                Sptr++;
            }
        }
    }

}

这是我收到的错误,如果您希望我发布完整的错误,请与我联系

Exception in thread "main" java.lang.ClassCastException: class arraysearch.runningClass cannot be cast to class java.lang.Comparable (arraysearch.runningClass is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')

最佳答案

您的类 RunningClass 未实现 Comparable,并且 Collections.sort 需要 Comparable,因为您未指定任何比较器实例。

为什么要定义一个新类 Sortbymake 来实现 Comparator 并且从不在任何地方使用它?

我认为你不明白 Comparator 和 Comparable 之间的区别(来自 source ):

  • Comparable:Comparable 是一个接口(interface),定义了将一个对象与其他相同类型的对象进行比较的策略。这称为类的“自然顺序”;
  • Comparator:Comparator 接口(interface)定义了一个compare(arg1, arg2) 方法,该方法有两个代表比较对象的参数,其工作方式与 Comparable.compareTo() 方法类似。

现在,您有两个解决方案(第一个对我来说是正确的):

在本例中,请在您的 RunningClass 上使用 Comparable 接口(interface),并调用 Collections.sort(numberList) 方法。这将利用 RunningClass 类中包含的 compareTo 方法的实现。

使用Sortbymake类,但在调用sort方法时指定比较器:Collections.sort(numberList, new Sortbymake())

关于java - 在 Java 中对数组列表进行排序时无法转换为类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028747/

相关文章:

java - 在 Java servlet 中处理之前发送响应

java - Windows 虚拟键盘

Java过滤器列表,因此它只包含与另一个列表中具有相同属性的对象

java - Hibernate一对多,运算符不存在(bytea =整数)

arrays - Swift 字典查找导致编译时错误

scala - 为什么 Option 不可遍历?

java - 查找两个不同列表是否包含完全相同元素的简单方法?

java - 您如何使程序根据较早的输入(x)提出一系列问题?

collections - Kotlin 进程收集并行?

java - 如何检查两个集合是否相等,忽略大小写?