Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 如何使用自定义对象创建libgdx数组的副本?_Java_Arrays_Libgdx - Fatal编程技术网

Java 如何使用自定义对象创建libgdx数组的副本?

Java 如何使用自定义对象创建libgdx数组的副本?,java,arrays,libgdx,Java,Arrays,Libgdx,我有一个数组,其中包含值pawnArray。我需要在pawnArray中找到最高值,因此使用自定义类方法getPawn()我检索最高值,但我确实检索到了 public static Pawn getPawn(Array<Pawn> strollpawns) { Array<Pawn> pawns = strollpawns; pawns.sort(); Pawn best = pawns.get(0); return best;

我有一个数组,其中包含值
pawnArray
。我需要在pawnArray中找到最高值,因此使用自定义类方法
getPawn()
我检索最高值,但我确实检索到了

    public static Pawn getPawn(Array<Pawn> strollpawns) {
    Array<Pawn> pawns = strollpawns;
    pawns.sort();
    Pawn best = pawns.get(0);

    return best;
}
公共静态典当getPawn(数组典当){
阵卒=阵卒;
pawns.sort();
典当最佳=典当。获取(0);
回报最好;
}

因此,我需要复制数组,因为此方法不起作用。如何复制此阵列?

您似乎遇到了与java相关的问题。为了帮助您在java对象编程中进行排序,存在方法重写和接口的概念

用于排序的特殊接口是Comparator,您可以将其内联到这样的方法中

Collections.sort(pawns ,new Comparator<Student>(){
                 public int compare(Pawn1 p1,Pawn2 p2){
                       // Write your logic here.
                       //ie.:
                       return p1.score - p2.score; 
                       //or for different order
                       return p2.score - p1.score;
                 }});
}

然后在您的代码中,您可以按照最初的意图调用:

pawns.sort();
Pawn best = pawns.get(0);
正如所料,您应该从ArrayList获得最大值典当

上面的代码只是示例,需要调试。但是现在您应该已经有了一个很好的概述,因为Java不知道如何对程序员定义的对象进行排序,除非他实现了用于集合排序的比较器逻辑


作为外部参考,我建议在

上运行一个简单的示例,您似乎遇到了与java相关的问题。为了帮助您在java对象编程中进行排序,存在方法重写和接口的概念

用于排序的特殊接口是Comparator,您可以将其内联到这样的方法中

Collections.sort(pawns ,new Comparator<Student>(){
                 public int compare(Pawn1 p1,Pawn2 p2){
                       // Write your logic here.
                       //ie.:
                       return p1.score - p2.score; 
                       //or for different order
                       return p2.score - p1.score;
                 }});
}

然后在您的代码中,您可以按照最初的意图调用:

pawns.sort();
Pawn best = pawns.get(0);
正如所料,您应该从ArrayList获得最大值典当

上面的代码只是示例,需要调试。但是现在您应该已经有了一个很好的概述,因为Java不知道如何对程序员定义的对象进行排序,除非他实现了用于集合排序的比较器逻辑


对于外部参考,我建议在

上运行一个简单的示例。如果您的问题是Java数组(语法是
Pawn[]
),那么您可以在Java.util.arrays类中使用方法对其执行许多不同的操作。您的要求可以通过以下方式实现:

Pawn[] newArr = Arrays.copyOf(oldArr, oldArr.length);
或者,由于数组类实现了可克隆性,还可以使用:

Pawn[] newArr = (Pawn[]) oldArr.clone(); // I don't remember if the cast is necessary
请注意,这两个数组都提供浅拷贝,也就是说,数组彼此独立(您可以对一个数组进行排序,而另一个数组中的索引不受影响),但它们的内容不受影响

编辑:有人向我指出,您的
数组实际上是libgdx中的一个类。查看文档,然后,您可以简单地使用创建浅层副本,因为文档说新实例将具有相同类型的备份数组(不是相同的实例)。例如:

Array<T> newArr = new Array<>(oldArr); // oldArr can be either Array<? extends T> or T[]

Array newArr=新数组(oldArr);//oldArr可以是Array如果您的问题是Java数组(语法是
Pawn[]
),那么您可以在Java.util.Array类中使用方法对其执行许多不同的操作。您的要求可以通过以下方式实现:

Pawn[] newArr = Arrays.copyOf(oldArr, oldArr.length);
或者,由于数组类实现了可克隆性,还可以使用:

Pawn[] newArr = (Pawn[]) oldArr.clone(); // I don't remember if the cast is necessary
请注意,这两个数组都提供浅拷贝,也就是说,数组彼此独立(您可以对一个数组进行排序,而另一个数组中的索引不受影响),但它们的内容不受影响

编辑:有人向我指出,您的
数组实际上是libgdx中的一个类。查看文档,然后,您可以简单地使用创建浅层副本,因为文档说新实例将具有相同类型的备份数组(不是相同的实例)。例如:

Array<T> newArr = new Array<>(oldArr); // oldArr can be either Array<? extends T> or T[]

Array newArr=新数组(oldArr);//oldArr可以是Array我为其添加了一个单独的答案,因为您希望复制数组并对其排序,以便检索最高值。我的另一个答案涉及复制数组,而tjago的答案涉及使用自定义比较器进行排序,以便自定义“最大值”是什么。但是,libgdx
Array
类似乎有一个方法可以做您想要做的事情,而不必制作数组的排序副本

如果只需要排序数组中的一个值:最小值、最大值,则此解决方案可以节省代码、内存和时间。如果需要不止一个,那么对数组进行排序可能会更快

我所说的方法是,根据提供的比较器返回第n个元素。还有另一个方法返回该元素的索引,而不是对象本身。您可以这样使用它:

// If Pawn implements Comparable<Pawn>:
Pawn minVal = arr.selectRanked(Comparator.naturalOrder(), 1);
Pawn maxVal = arr.selectRanked(Comparator.naturalOrder(), arr.size);

// If it does not implement Comparable, you need to provide a Comparator<Pawn>:
// Assuming Pawn has an "int getValue()" method that we want to compare:
Pawn minVal = arr.selectRanked(Comparator.comparingInt(Pawn::getValue), 1);
// You could also write your own implementation directly:
Comparator<Pawn> comp = (a,b) -> /* your int-returning logic here */;
Pawn minVal = arr.selectRanked(comp, 1);
//如果典当实现了可比性:
Pawn minVal=arr.selectRanked(Comparator.naturalOrder(),1);
Pawn maxVal=arr.selectRanked(Comparator.naturalOrder(),arr.size);
//如果未实现Comparable,则需要提供比较器:
//假设Pawn有一个我们想要比较的“int getValue()”方法:
Pawn minVal=arr.selectRanked(Comparator.comparingInt(Pawn::getValue),1);
//您也可以直接编写自己的实现:
比较器comp=(a,b)->/*此处返回的int逻辑*/;
Pawn minVal=arr.selectRanked(综合,1);

我为这个问题添加了一个单独的答案,因为您希望复制数组并对其排序,以便检索最高值。我的另一个答案涉及复制数组,而tjago的答案涉及使用自定义比较器进行排序,以便自定义“最大值”是什么。但是,libgdx
Array
类似乎有一个方法可以做您想要做的事情,而不必制作数组的排序副本

如果只需要排序数组中的一个值:最小值、最大值,则此解决方案可以节省代码、内存和时间。如果需要不止一个,那么对数组进行排序可能会更快

我所说的方法是,根据提供的比较器返回第n个元素。还有另一个方法返回该元素的索引,而不是对象本身。你可以用