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文档。