Fer*_*ara 15 java arrays sorting compareto
在我的程序中,创建了一个fClasses
固定长度[7]的对象数组,每个对象都是一个FClass
包含3 Strings
,an int
和a的类int[]
.这些值从.txt文件中读取,并根据其值添加到数组的特定索引中int
..txt文件中的条目较少,然后数组中有索引,因此数组最终看起来像这样:
fClasses[0] { str1, str2, str3, int1, int [] {1,2,3,4,5}}
fClasses[1] { str1, str2, str3, int1, int [] {1,2,3,4,5}}
fClasses[2] { str1, str2, str3, int1, int [] {1,2,3,4,5}}
fClasses[3] null
fClasses[4] null
fClasses[5] { str1, str2, str3, int1, int [] {1,2,3,4,5}}
fClasses[6] { str1, str2, str3, int1, int [] {1,2,3,4,5}}
Run Code Online (Sandbox Code Playgroud)
在稍后的节目,我需要的基础上平均的数组排序ints
的int[]
.我有一个工作方法来返回这个,但当我尝试使用数组排序时compareTo
,Arrays.sort
我得到一个很长的错误列表,从这些开始:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at FProg.sortClasses(FProg.java:228)
Run Code Online (Sandbox Code Playgroud)
我的compareTo
方法看起来像这样,它位于一个实现的类中Comparable
:
public int compareTo(FClass other)
{
if (other == null || this.avg == other.avg)
{
return 0;
}
else if (this.avg < other.avg)
{
return -1;
}
else
{
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试调用此方法进行排序:
public void sortClasses()
{
Arrays.sort(fClasses, 0, MAX_CLASSES);
}
Run Code Online (Sandbox Code Playgroud)
我用.txt文件测试了它,该文件包含足够的条目来填充数组,并且在这种情况下排序正常工作,所以我相信我遇到的问题是我的排序方法无法对具有null元素的数组进行排序它.有什么办法可以实现吗?
Jef*_*oom 13
使用Java 8,您可以轻松构建所需的比较器:
Arrays.sort(fClasses, Comparator.nullsFirst(Comparator.naturalOrder()));
Run Code Online (Sandbox Code Playgroud)
nullsLast
当然,如果那是你想要的,请使用它.
ssk*_*ssk 10
您需要自己的Comparator
实现并检查空值并返回0
Arrays.sort(fClasses, new Comparator<FClass>() {
@Override
public int compare(FClass o1, FClass o2) {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
return o1.compareTo(o2);
}});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7205 次 |
最近记录: |