Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Selection - Fatal编程技术网

Java 输出错误数据的双值排序

Java 输出错误数据的双值排序,java,sorting,selection,Java,Sorting,Selection,我在大学课程上遇到了一些问题。作业的最后一部分我也很沮丧,我认为容易的部分很快就变成了最难的部分。我被要求按距离对.cvs文件中的值进行排序(如17.0123874627346,0.123761947等) 这是我的代码: public void sortDistance() { System.out.println("before distance sort"); for (int k = 0; k < ntracks; k++) { System.out.

我在大学课程上遇到了一些问题。作业的最后一部分我也很沮丧,我认为容易的部分很快就变成了最难的部分。我被要求按距离对
.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());
    }
}
public void sortDistance(){
System.out.println(“距离排序前”);
对于(int k=0;k
Float s[]={1,3,2};
数组。排序

我认为没有必要实现您自己的排序逻辑,您可以使用提供的方法

Arrays.sort(tracks);

System.out.print(Arrays.toString(tracks));

TL:DR

  • 对高精度浮点数使用BigDecimal
  • 使用Compariable and Collections.sort()进行排序
完整答案

看起来你有一个类,看起来有点像这样:

public class Track
    private float distance;
    public Track(float distance) {
        this.distance = distance;
    }
    public float getDistance() {
        return this.distance;
    }
}
public class Track
    private BigDecimal distance;
    public Track(String distance) {
        this.distance = new BigDecimal(distance);
    }
    public BigDecimal getDistance() {
        return this.distance;
    }
}
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());
    }
}
如果是这样的话,那么我很想把它改大一点,然后使用
BigDecimal
BigDecimal
是一种设计用于在需要高精度时使用十进制数的对象。因为您的一个示例距离有13位小数,所以我将直接前往
BigDecimal

所以我把它改成这样:

public class Track
    private float distance;
    public Track(float distance) {
        this.distance = distance;
    }
    public float getDistance() {
        return this.distance;
    }
}
public class Track
    private BigDecimal distance;
    public Track(String distance) {
        this.distance = new BigDecimal(distance);
    }
    public BigDecimal getDistance() {
        return this.distance;
    }
}
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());
    }
}
在这里,您可以依赖这样一个事实,
BigDecimal
实现了Comparable接口,因此它有一个
compareTo
方法。因此,您可以为Track实现
Comparable
,然后只
委托给
BigDecimal
上的compareTo方法。所以像这样:

public class Track
    private float distance;
    public Track(float distance) {
        this.distance = distance;
    }
    public float getDistance() {
        return this.distance;
    }
}
public class Track
    private BigDecimal distance;
    public Track(String distance) {
        this.distance = new BigDecimal(distance);
    }
    public BigDecimal getDistance() {
        return this.distance;
    }
}
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());
    }
}
最后,我要说的是,我还没有运行任何这段代码,所以它可能无法编译

此外,以下是我提到的一些新概念的文档:


在java中,有一种内置方法,可用于排序。Java.util.array。它可以对基本类型数据进行排序。有关更多详细信息,请参阅oracle文档。