我在大学课程中遇到了一些问题。我也失去了作业的最后一部分,我认为简单的部分很快就变得最难。我被要求按距离对.cvs
文件中的值进行排序(17.0123874627346,0.123761947
之类的值等)
这是我的代码:
public void sortDistance() {
System.out.println("before distance sort");
for (int k = 0; k < ntracks; k++) {
System.out.println(tracks[k].getDistance());
}
for (int i = 0; i < ntracks; i++) {
//find the index of the minimum position
int index = i;
//looping through array of distances
for (int j = i + 1; j < ntracks; j++) {
if (tracks[index].getDistance() < tracks[j].getDistance())
{
//position j is new mimum index
index = j;
}
}
//swap the two values around so smallest becomes track index
Track smallerTrack = tracks[index];
tracks[index] = tracks[i];
tracks[i] = smallerTrack;
}
System.out.println(" after distnace sort");
for (int k = 0; k < ntracks; k++) {
System.out.println(tracks[k].getDistance());
}
}
答案 0 :(得分:1)
Float s [] = {1,3,2}; Arrays.sort(一个或多个);
答案 1 :(得分:0)
我认为没有必要实现自己的逻辑排序,你可以使用提供的方法..
Arrays.sort(tracks);
System.out.print(Arrays.toString(tracks));
答案 2 :(得分:0)
<强> TL:DR; 强>
完整答案
看起来你的课程看起来有点像这样:
public class Track
private float distance;
public Track(float distance) {
this.distance = distance;
}
public float getDistance() {
return this.distance;
}
}
如果是这种情况,那么我很想改变它并与BigDecimal
一起工作。 BigDecimal
是一个对象,设计用于在需要高精度时使用十进制数。由于您的一个样本距离有13个小数位,我将直接前往BigDecimal
。
所以我改变它看起来像这样:
public class Track
private BigDecimal distance;
public Track(String distance) {
this.distance = new BigDecimal(distance);
}
public BigDecimal getDistance() {
return this.distance;
}
}
从这里开始,您可以依赖BigDecimal
实现Comparable接口的事实,因此它具有compareTo
方法。因此,您可以为跟踪实施Comparable
,然后delegate
为BigDecimal
上的compareTo方法实施。像这样:
public class Track implements Comparable<Track> //Note we now implement an interface
private float distance;
public Track(float distance) {
this.distance = distance;
}
public float getDistance() {
return this.distance;
}
public int compareTo(Track track) { //And our implementation just delegates to the BigDecimal compareTo method
return this.distance.compareTo(track.getDistance());
}
}
一旦你有了这个,你的分类变得非常容易!您可以替换所有距离检查(因为compareTo
BigDecimal
正在为您执行此操作)并且只需在Track对象列表上调用Collections.sort()
。像这样的东西会起作用:
public void sortDistance() {
System.out.println("before distance sort");
for (int k = 0; k < ntracks; k++) {
System.out.println(tracks[k].getDistance());
}
List<Track> tracksList = Arrays.asList(tracks); //Convert to a list to use the Collections API
Collections.sort(trackList);
System.out.println(" after distnace sort");
for (int k = 0; k < ntracks; k++) {
System.out.println(tracksList.get(k).getDistance());
}
}
我刚刚结束时说我没有运行任何此类代码,因此可能无法编译。
另外,这里有一些我已经提到的一些文件,以防他们提出新概念: