2013-10-06 56 views
-1

我有一個Arraylist溫度和天。我使用插入排序方法對arraylist進行排序。當我打印出來的時候,它不會以打印出來的方式打印出來:76,84,81,88,87。難道是因爲我把Collections.sort(dailytemps)這一行註釋掉了嗎?它示數出來,所以我評論說出來排序錯誤的數組打印錯誤

這裏是我的代碼:

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

回答

2

compareTo()執行不正確。如果this.temperature大於other.temparature,則永不返回1。

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

謝謝你,我從我的電腦複製到我們的學校帳戶,鍵入-1而不是1.只是一個問題。在DailyTemperature類中,我是否必須實現可比較?因爲它沒有它的工作。 –

+0

你最好應該實現'可比'。如果沒有它,嘗試'Collections.sort()',你會得到一個異常。理想情況下,該類應該準備好用於'Collections' API以及像TreeSet一樣的排序集合。 –

+0

由於您正在使用自定義排序並直接訪問「compareTo」方法,因此您不需要執行「Comparable」。例如,如果您想使用'Collections.sort',則必須使用'Comparable'。 –

1

您的評論與評論Collections.sort是無論如何都是打印後行。你可以簡單地做Collections.sort然後打印,而不是製作一個新的方法插入排序

+0

是的。但要做到這一點,'DailyTemperature'的聲明需要包含'implements Comparable '。這正是我在這個問題的早期版本上給OP的建議。 –