Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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 比较器无任何错误?_Java_Android_Libgdx - Fatal编程技术网

Java 比较器无任何错误?

Java 比较器无任何错误?,java,android,libgdx,Java,Android,Libgdx,当我在安卓系统中运行我的程序时,我在这一行得到以下异常 private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(new TurnComparator()); FATAL EXCEPTION: GLThread 18092 Process: com.buckriderstudio.clonequest, PID: 10171 java.lang.NoSuchMethodError: N

当我在安卓系统中运行我的程序时,我在这一行得到以下异常

private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(new TurnComparator());

FATAL EXCEPTION: GLThread 18092
Process: com.buckriderstudio.clonequest, PID: 10171
java.lang.NoSuchMethodError: No direct method <init>(Ljava/util/Comparator;)V in class Ljava/util/PriorityQueue; or its super classes (declaration of 'java.util.PriorityQueue' appears in /system/framework/core-libart.jar)
private PriorityQueue turnqueue=new PriorityQueue(new turnparator());
致命异常:GLThread 18092
进程:com.buckridestudio.clonequest,PID:10171
java.lang.NoSuchMethodError:Ljava/util/PriorityQueue类中没有直接方法(Ljava/util/Comparator;)V;或者它的超类(声明'java.util.PriorityQueue'出现在/system/framework/core libart.jar中)
这是我的比较器的外观:

public class TurnComparator implements Comparator<Creature> {    
    @Override
    public int compare(Creature c1, Creature c2) {
        if (c1.getNextMove() < c2.getNextMove()) return -1;
        if (c1.getNextMove() > c2.getNextMove()) return 1;
        else return 0;
    }   
}
公共类TurnComparator实现Comparator{
@凌驾
公共智力比较(生物c1,生物c2){
if(c1.getNextMove()c2.getNextMove())返回1;
否则返回0;
}   
}

这似乎是某种兼容性问题,但我不知道如何解决这个问题。Android是否完全不支持
比较器
?比较
PriorityQueue
的一个好的兼容替代品是什么?

如果您查看java文档,您会发现优先级队列没有这样的构造函数:

您还需要指定初始容量,即

private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(5, new TurnComparator());
private PriorityQueue turnqueue=new PriorityQueue(5,new turnparator());

更新:值得注意的是,这在Java8中确实有效——他们添加了一个额外的构造函数

如果您查看java文档,就会发现优先级队列没有这样的构造函数:

您还需要指定初始容量,即

private PriorityQueue<Creature> turnqueue = new PriorityQueue<Creature>(5, new TurnComparator());
private PriorityQueue turnqueue=new PriorityQueue(5,new turnparator());
更新:值得注意的是,这在Java8中确实有效——他们添加了一个额外的构造函数

ArrayList.sort()方法后来在API级别24中添加,这就是它不起作用的原因。可能有两种解决方案,您可以更新java版本,也可以使用下面的方法

 Collections.sort(yourList, new Comparator<Creature>() {
            @Override
            public int compare(Creature c1, Creature c2) {
                if (c1.getNextMove() < c2.getNextMove()) return -1;
                if (c1.getNextMove() > c2.getNextMove()) return 1;
                else return 0;
            }
        });
Collections.sort(yourList,newcomparator(){
@凌驾
公共智力比较(生物c1,生物c2){
if(c1.getNextMove()c2.getNextMove())返回1;
否则返回0;
}
});
ArrayList.sort()方法后来在API级别24中添加,这就是它不起作用的原因。可能有两种解决方案,您可以更新java版本,也可以使用下面的方法

 Collections.sort(yourList, new Comparator<Creature>() {
            @Override
            public int compare(Creature c1, Creature c2) {
                if (c1.getNextMove() < c2.getNextMove()) return -1;
                if (c1.getNextMove() > c2.getNextMove()) return 1;
                else return 0;
            }
        });
Collections.sort(yourList,newcomparator(){
@凌驾
公共智力比较(生物c1,生物c2){
if(c1.getNextMove()c2.getNextMove())返回1;
否则返回0;
}
});

TurnComparator的签名是什么?它是否实现了
TurnComparator
的签名?是的,谢谢。我使用的是Java8,这就是它在我的桌面上运行的原因。我最好把它切换到Java7,这样我所做的一切都能与Android兼容。我编辑了我的答案,提到它在Java8中工作,因为我没有意识到这一点!是的,谢谢。我使用的是Java8,这就是它在我的桌面上运行的原因。我最好把它切换到Java7,这样我所做的一切都能与Android兼容。我编辑了我的答案,提到它在Java8中工作,因为我没有意识到这一点!