我正在使用PriorityQueue结构来获取用户设置的一些字段,这是代码的一部分:
package gqg;
import java.util.Queue;
public class Student {
//variables (ID, Name, ...), constructors, getters and setters...
Queue<Student> StudentQueue = new PriorityQueue<Student>();
public void Add() { //method to add the student at Queue
for(int x=0; x<1; x++) {
Student st = new Student();
System.out.println("+---------------------------+\n"
+ "| Students Registration |\n"
+ "+---------------------------+");
System.out.println("| Type the student's ID:");
stu.setID(user.nextInt());
System.out.println("| Type the student's name:");
stu.setName(user.next());
System.out.println("| Type the student's age:");
stu.setAge(user.nextInt());
//and other fields...
StudentQueue.add(st);
}
System.out.println("Done. Student has been added successfuly\n");
}
/* then I call Add(); in Menu();
* this method also has Print(); Modify(); Eliminate(); those three works well
* The only one problem is Add();
*/
public void Menu(){
//... methods
}
}
当我仅添加一个“学生”时没有问题,但是当我尝试捕获第二个“学生”时,应用程序将引发此异常
Exception in thread "main" java.lang.ClassCastException: gqg.Student cannot be cast to java.lang.Comparable at
java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:633) at
java.util.PriorityQueue.siftUp(PriorityQueue.java:629) at
java.util.PriorityQueue.offer(PriorityQueue.java:329) at
java.util.PriorityQueue.add(PriorityQueue.java:306) at
gqg.Student.AddQueue(Student.java:374) at
gqg.Student.Menu(Student.java:592) at
gqg.MainClass.main(MainClass.java:7)
有人可以向我解释问题出在哪里/为什么?我花了很多时间在Web上寻找解决方案,但找不到,我在这里需要一些帮助…
如果不提供custom
Comparator
,PriorityQueue
则对它持有的对象使用自然顺序。也就是说,它希望您的对象Comparable
彼此之间。您的Student
课程似乎没有实现Comparable
。
有两个选择:
Comparator
用于比较Student
对象的自定义Student
班级Comparable<Student>
以适当的逻辑实施我使用PriorityQueue结构来获取用户设置的一些字段,下面是部分代码: 当我只添加一个“student”时没有问题,但是当我试图捕获第二个“student”时,应用程序会抛出这个异常 谁能解释一下问题出在哪里/为什么?我花了很多时间在网上寻找解决方案,但我找不到,我需要一些帮助。。。谢谢你帮助我
我关注的是从包含数千个元素的Java PriorityQueue创建排序数组的不同风格。Java8文档说 如果需要有序遍历,请考虑使用数组。排序(pq.toArray())。 然而,我确实喜欢流式API,所以我最初的想法是 (其中,是PriorityQueue的自定义比较器,我确实想要它的相反顺序。)与下列习惯用法相比,使用这个习惯用法有什么缺点吗 后面的代码显然更直接地遵循了API文档的建议,但
问题内容: 我正在尝试将文件保存到SQL Server数据库中,该文件将保存在其中的列是datatype 。 我目前这样做的方式是通过获取文件路径并将文件转换为字节数组。 然后,我使用插入查询和convert函数将字节插入数据库,以将转换为: 但是,在SQL Server数据库中,的值始终为 而且,无论选择哪个文件,都始终是该数字。因此,如果您能告诉我为什么会这样,以及我应该采取什么措施来防止这种
问题内容: 我想将SQL COUNT的结果存储在变量中,然后将它们除,但是出现错误: 注意:类mysqli_result的对象无法在----中转换为int 我曾经在测试时显示结果…我该如何解决? 问题答案: 您需要先获取结果并将其存储在变量中,然后再进行数学运算。
问题内容: 为什么写: 问题答案: 实现的对象是。 您要在其中覆盖的方法应将对象作为参数,而将其强制转换为。您的实现应描述如何与另一个进行比较。 要真正进行排序,您可能还需要制作工具,然后将实际逻辑复制粘贴到其中。
问题内容: 我在Java整数中有优先级队列: 当我打电话时,我得到了最小的元素。 问题:如何更改代码以获取最大元素? 问题答案: 这样吧: 在提供了一个将在元素进行排序在这种情况下,在该oposite为了自己的自然顺序。