Java 已排序的Arraylist按错误顺序打印
我有一个温度和天数的数组列表。我使用插入排序方法对arraylist进行排序。当我把它打印出来的时候,它并没有以排序的方式打印出来,而是打印出来:76,84,81,88,87。可能是因为我注释掉了Collections.sortdailytemps行吗?它出错了,所以我把它注释掉了 这是我的密码:Java 已排序的Arraylist按错误顺序打印,java,sorting,printing,arraylist,Java,Sorting,Printing,Arraylist,我有一个温度和天数的数组列表。我使用插入排序方法对arraylist进行排序。当我把它打印出来的时候,它并没有以排序的方式打印出来,而是打印出来:76,84,81,88,87。可能是因为我注释掉了Collections.sortdailytemps行吗?它出错了,所以我把它注释掉了 这是我的密码: import java.io.*; import java.util.Scanner; import java.util.Arrays; public class DailyTemperat
import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
public class DailyTemperature
{
//variables
private double temperature;
private String day;
//getTemp & setTemp methods
public double getTemp()
{
return temperature;
}
public void setTemp(double newTemp)
{
temperature = newTemp;
}
//getDay & setDay methods
public String getDay()
{
return day;
}
public void setDay(String newDay)
{
day = newDay;
}
//constructor
public DailyTemperature(String day, double temperature)
{
this.day = day;
this.temperature = temperature;
}
//compareTo method used for Comparable interface
public int compareTo(DailyTemperature other)
{
if (temperature < other.temperature) return -1;
if (temperature == other.temperature) return 0;
return -1;
}
//toString method to print out original arraylist contents and sorted arraylist contentes
public String toString()
{
return("Day of Week: " + this.getDay() +
" - Temperature: " + this.getTemp());
}
}
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
public class DailyTemperatureList
{
public static void main (String [] args)
{
ArrayList<DailyTemperature> dailytemps = new ArrayList<DailyTemperature>();
dailytemps.add(new DailyTemperature("Mon", 87.1));
dailytemps.add(new DailyTemperature("Tue", 88.3));
dailytemps.add(new DailyTemperature("Wed", 81.2));
dailytemps.add(new DailyTemperature("Thu", 84.0));
dailytemps.add(new DailyTemperature("Fri", 76.3));
//original list printout
System.out.println("Original List:" );
System.out.println( dailytemps.toString() );
System.out.println(" "); //empty line
//method to sort array list
insertionSort(dailytemps);
//sorted list printout
System.out.println("Sorted List:" );
System.out.println( dailytemps.toString() );
//Collections.sort(dailytemps);
}
static void insertionSort(ArrayList<DailyTemperature> dailytemps)
{
DailyTemperature temp = null;
int position = 0;
//loop from 2nd element on
for (int i = 1; i < dailytemps.size(); i++)
{
temp = dailytemps.get(i);
position = i;
while ( 0 < position && temp.compareTo(dailytemps.get(position - 1)) < 0)
{
dailytemps.set(position, dailytemps.get(position - 1));
position--;
}
dailytemps.set(position,temp);
}
}
}
您与实现的比较不正确。如果this.temperature大于other.temperature,则永远不会返回1
您的评论集合。排序在打印行之后。你可以简单地收集。排序然后打印,而不是使用新方法插入排序谢谢,我正在从我的计算机复制到我们学校的帐户,然后键入-1而不是1。还有一个问题。在DailyTemperature类中,我必须实现可比性吗?因为它在没有它的情况下工作。理想情况下,您应该实现可比较的。如果尝试不使用Collections.sort,则会出现异常。理想情况下,该类应该可以与Collections API以及已排序的集合(如树集)一起使用。您不需要实现Comparable,因为您使用的是自定义排序并直接访问compareTo方法。例如,如果要使用Collections.sort,则必须使用Comparable.Yes。但要做到这一点,每日温度的声明需要包括可比较的温度。这正是我就这个问题的早期版本在OP上给出的建议。
public int compareTo(DailyTemperature other)
{
if (temperature < other.temperature) return -1;
if (temperature == other.temperature) return 0;
return -1; // return 1; here
}