2016-01-22 131 views
0

我想先說我不是很有經驗,如果已經回答,我很抱歉。我一直在努力尋找答案,但一直未能。從最低排列到最高排列而不排序

我正在使用用戶向數組中輸入數字的項目。這些數字代表不同日子的溫度。這些日子顯然是陣列中的陣地。我需要找到一種方法來打印溫度從最小到最大,而無需對陣列進行排序。

因此,如果用戶輸入[56,45,67,41,59,70],這意味着它在位置0(第1天)爲56度,在位置2(第3天)爲67度。我需要保持陣列的位置相同,以便打印時的日期與臨時數據保持一致。

編輯:我附上我目前爲止在我的項目中的代碼。 HighestOrdered方法是我不知道該怎麼做或從何處開始的方法。對於上面說的HighestOrdered方法,我需要讓它打印出當天(數組中的位置)的臨時數據,我不知道該怎麼做。

這是我到目前爲止的代碼:

public class Weather { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int [] high = new int[30]; 
    int [] low = new int[30]; 

    Init (high); 
    Init(low); 


    LoadData(high,low); 
    Report(high, low); 

    FindAvg(high,low); 
    Lowest(high, low); 
    Highest(high,low); 
} 
public static void Init(int A[]) 
{ 
    for(int i = 0; i < A.length; i++) 
    { 
     A[i] = 510; 
    } 
} 

public static void Report(int[] H, int[] L) 
{ 
    System.out.println("Day High Low"); 

    for(int i = 0; i < H.length; i++) 
    { 
     System.out.println(i + "  " + H[i] + "  " + L[i]); 
    } 
} 
public static void LoadData(int[] H, int[] L) 
{ 

    int day = 0; 
    while(day < 30) 
    { 
     try { 
      int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high")); 
      H[day] = high; 
     } catch (NumberFormatException e) { 
     } 
     try { 
      int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low")); 
      L[day] = low; 
     } catch (NumberFormatException e) { 
     } 
     day++;   

    }  
} 
public static void FindAvg(int[] H, int[] L){ 

    int sumHigh = 0; 
    int avgHigh; 

    int sumLow = 0; 
    int avgLow; 

    for(int i : H) 
     sumHigh += i; 
    avgHigh = sumHigh/H.length; 

    for(int i : L) 
     sumLow += i; 
    avgLow = sumLow/L.length; 

    System.out.println("The average for the high is: " + avgHigh); 
    System.out.println("The average for the low is: " + avgLow); 
} 
public static void Highest(int[] H, int[] L) 
{ 
    int highestHigh = -1000; 
    int dayHigh = 0; 

    int highestLow = -1000; 
    int dayLow = 0; 

    for(int i = 0; i < H.length; i++) 
    { 
     if(H[i] > highestHigh && H[i] != 510) 
     { 
      highestHigh = H[i]; 
      dayHigh = i; 
     } 
    } 
    System.out.println("\n" + "The highest high is: " + highestHigh + " degrees." + "\n" + 
      "This temperature was recorded on day: " + dayHigh);  

    for(int i = 0; i < L.length; i++) 
    { 
     if(L[i] > highestLow && L[i] != 510) 
     { 
      highestLow = L[i]; 
      dayLow = i; 
     } 
    } 
    System.out.println("\n" + "The highest low is: " + highestLow + " degrees." + "\n" + 
      "This temperature was recorded on day: " + dayLow); 
} 

public static void Lowest(int[] H, int[] L) 
{ 

    int lowestHigh = 1000; 
    int dayHigh = 0; 

    int lowestLow = 1000; 
    int dayLow = 0; 

    for(int i = 0; i < H.length; i++) 
    { 
     if(H[i] < lowestHigh) 
     { 
      lowestHigh = H[i]; 
      dayHigh = i;  
     } 
    } 
    System.out.println("\n" + "The lowest high is: " + lowestHigh + " degrees." + "\n" + 
      "This temperature was recorded on day: " + dayHigh); 

    for(int i = 0; i < L.length; i++) 
    { 
     if(L[i] < lowestLow) 
     { 
      lowestLow = L[i]; 
      dayLow = i; 
     } 
    } 
    System.out.println("\n" + "The lowest low is: " + lowestLow + " degrees." + "\n" + 
      "This temperature was recorded on day: " + dayLow); 
} 

public void HighestOrdered(int[] H) 
{ 

} 
} 
+4

使數組的副本,並那種。在第二個數組中,您可以跟蹤索引,即進行與主數組中相同的交換。 – Henry

+1

如何在沒有排序的情況下進行排序 –

+0

當您說「沒有排序」時,您的意思是:(1)您需要保留原始訂購信息(即'[56,45,67,41,59,70]'),但是做一個這樣的副本和排序,這將是確定的;或(2)這是一些課程的作業,禁止排序? –

回答

0

下面是一個小例子,展示如何做到這一點。只有輔助index數組被排序,原始temp數組未被更改。

public static void main(String[] args) { 
    final int [] temp = {56, 45, 67, 41, 59, 70}; 

    Integer [] index = new Integer[temp.length]; 
    for (int i = 0; i < index.length; i++) { 
     index[i] = i; 
    } 

    Arrays.sort(index, new Comparator<Integer>() { 
     @Override 
     public int compare(Integer a, Integer b) { 
      return temp[a] - temp[b]; 
     } 
    }); 

    for (Integer i : index) { 
     System.out.printf("temp %d on day %d%n", temp[i], i); 
    } 

} 

這使輸出:

temp 41 on day 3 
temp 45 on day 1 
temp 56 on day 0 
temp 59 on day 4 
temp 67 on day 2 
temp 70 on day 5 
0

,代替目前的陣列,你可以創建一個包含兩個元素的每個對象的對象數組:白天和相應的溫度。

按溫度值排序該陣列,然後打印。

1

這是一個開始。

從你的陣列,創建一個分類地圖,說

Map<Integer,Integer> mymap = new TreeMap<Integer,Integer>

您將使用temp作爲鍵值,並使用該值作爲日期。例如,從您的數據。例如,

myMap.put(56,1); myMap.put(45,2);

(注 - 在實際的代碼你迭代這個數組把值)

然後你可以遍歷鍵和值(或條目)在我的地圖。

+6

如果你使用溫度作爲關鍵,你應該知道,如果兩天有相同的溫度,只有最後一個將出現在'Map' –

+0

好點,grrr ... – user949300

相關問題