Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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_Printing_Comparable_Insertion Sort - Fatal编程技术网

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

在java中使用插入排序算法对数组列表中的温度进行排序,java,printing,comparable,insertion-sort,Java,Printing,Comparable,Insertion Sort,我正在开发一个程序,它将获取一个temperaturesdouble和daysstring列表,并使用一个对象数组实现该列表。然后我需要使用插入排序算法对对象进行排序。程序的输出应为原始订单和分拣机输出。然而,我有点困惑,我如何才能进行排序的温度。我实现了可比较的接口并编写了插入排序。我只需要打印原始的arraylist和排序后的arraylist即可。我编写了一个toString方法来打印原始文件,它可以编译但不打印。这是我的密码: import java.io.*; import java

我正在开发一个程序,它将获取一个temperaturesdouble和daysstring列表,并使用一个对象数组实现该列表。然后我需要使用插入排序算法对对象进行排序。程序的输出应为原始订单和分拣机输出。然而,我有点困惑,我如何才能进行排序的温度。我实现了可比较的接口并编写了插入排序。我只需要打印原始的arraylist和排序后的arraylist即可。我编写了一个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() );
    }




}

您需要添加可比较接口所需的public int compareToDailyTemperature方法

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

 }

@德卡采尔是正确的。我只想补充一点,通过使compareTo实现更紧密,您可以更多地利用Java提供的现成功能:

以下是为简洁起见编辑的同一类:

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

    public int compareTo(DailyTemperature other) {
        return temperature.compareTo(other.temperature);
    }

}
如果您在内部将温度存储为Double,并利用autoboxing,它允许您无缝地从Double到Double…ish,那么您可以利用Double实现compariable的事实,并将自定义类中的comparieto实现委托给Double

然后您完全按照@dkatzel所说的那样进行插入排序,使用temperature.compareTo调用替换通常的原始比较

巧合的是,我们刚刚完成了一个关于Java中比较的研究。如果你想更多地解释它们是如何工作的,请看一看


希望能有所帮助。

您是按天排序还是按值排序?@JasperHolton按值排序我可以使用插入排序吗?或者Compariable在很大程度上替代了排序算法吗?Compariable可用于回答给定的2个温度,这比另一个温度低?。您可以在编写的任何排序算法中使用它来确定在何处交换零件。在插入排序中,在何处使用可比较的?我不知道如何在插入排序中使用可比较的。a和b是否等于温度?我不知道如何将温度调整到正确的顺序。我们的教授从未教过我们插入排序,所以我真的很困惑:/在dkatzel的插入排序算法中a和b等于什么?我必须使它们等于不同的温度吗?