java - 使用java中的插入排序算法对数组列表中的温度进行排序

标签 java printing comparable insertion-sort

我正在开发一个程序,该程序将获取温度( double )和天数(字符串)列表并使用对象数组实现该列表。然后我需要使用插入排序算法对对象进行排序。程序的输出应该是原始订单和排序器输出。然而,我对如何对温度进行排序有点困惑。我实现了Comparable接口(interface)并编写了插入排序。我只需要打印原始数组列表和打印排序后的数组列表。我编写了一个 toString 方法来打印原始文件,它可以编译但不打印。这是我的代码:

 import java.io.*;
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;


public class DailyTemperature implements Comparable<DailyTemperature>
{
     //variables
    private Double temperature;
    private String day;

    //getTemp & setTemp methods
    public double getTemp()
    {
      return temperature;
    }

    public void setTemp(double newTemp)
    {
      temperature = newTemp;
    }

    //getDay & setTEmp methods
    public String getDay()
    {
      return day;
    }

    public void setDay(String newDay)
    {
      day = newDay;
    }


    public DailyTemperature(String day, double temperature) 
    {
      this.day = day;
      this.temperature = temperature;
    }

    public int compareTo(DailyTemperature other) 
    {
        if (temperature < other.temperature) return -1;
        if (temperature == other.temperature) return 0;
        return 1;
    }

    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));
   }

   public static <T extends Comparable<? super T>>
   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);
        }
        System.out.println( dailytemps.toString() );
    }




}

最佳答案

您需要添加 Comparable 接口(interface)所需的方法 public intcompareTo(DailyTemperature)

public class DailyTemperature implements Comparable<DailyTemperature>{

   //...

   public int compareTo(DailyTemperature other){

      //your code goes here if "this"< than other, return a negative int
      //if this > other return positive int
      //if they are equal in the eyes of sort, then return 0

   }

}

编辑:您的排序将使用这样的比较

 DailyTemperature a = ...
 DailyTemperature b = ...

 if(a.compareTo(b) < 0){
     // a < b
 }else{
     // a >=b

 }

关于java - 使用java中的插入排序算法对数组列表中的温度进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204926/

相关文章:

java - 在 Java GUI 中显示 com 端口数据

java - 适用于 Android 的 2D 图形库

java - 如果参数是同一接口(interface)的不同实现,compareTo() 应该返回什么?

java - Comparator/able 中的 equals() 与 compareTo()(理论)

java - 为什么 compareTo 在 Java 中的 Enum final 上?

java - 如何检查一个数字是否包含超过1个相同的数字? ( java )

java - Spring Controller 返回不同的日期格式

macos - 在 OS X 上从单声道打印

c - 打印此浮点格式

打印纸张尺寸的 CSS 媒体查询