2014-01-05 78 views
-2

我必須列出飛行員的飛行小時數並進行選擇性排序升序和降序。 我做了小時數的升序選擇,但我不知道如何讓程序顯示基於小時數的名字升序。選擇性排序Java

這就是我所做的。 你能幫我嗎?

int arr[]={50,150,100,250,200,24,376,541,56,164}; 
int arrLength = arr.length; 
for(int i=0;i<arrLength-1;i++){ 
    int min=i; 
    for (int k=i+1;k<arrLength;k++){ 
     if(arr[k]<arr[min]){ 
      min = k; 
     } 
    } 
    if (i != min) { 
     int temp=arr[i]; 
     arr[i]=arr[min]; 
     arr[min]=temp; 
    } 
} 
for (int j=0;j<arrLength;j++) { 
    System.out.println(arr[j]+" ");} 
} 

}

+4

哪裏飛行員? – Keppil

回答

1

您使用交換功能。當你這樣做時,你將交換索引之間的小時值。那麼,那麼你也應該交換相應的飛行員的名字。對於每次交換,這些飛行員​​也將被交換。

我談論的交換功能是這樣的:

int temp=arr[i]; 
arr[i]=arr[min]; 
arr[min]=temp; 

做這樣的事情:

String tempName = names[i]; 
names[i] = names[min]; 
names[min] = tempName; 

另一個要考慮的將創建一個Pilot類。這樣做,你會保持一個面向對象的概念,並可以更輕鬆地處理排序。

例如,

public class Pilot implements Comparable<Pilot> { 

    int hours; 
    String name; 

    public Pilot(String name, int hours){ 
     this.name = name; 
     this.hours = hours; 
    } 

    @Override 
    public int compareTo(Pilot other){ 
     return hours.compareTo(other.hours); 
    } 

} 

然後,您可以使用Pilot#compareTo(Pilot)功能弄清楚如何根據關閉的小時數的飛行員進行排序,甚至完全改變你想從他們那裏進行排序的方式。

1

使用TreeMap來存儲飛行員的飛行時間,然後Java根據該值自動爲您分類(使時間成爲可能)。

建立一個

public static Map<String, Integer> pilots = new TreeMap<String, Integer>(); 

然後將值添加到它:

pilots.put(導頻,pilotHours);

在你的情況,你可以使用一些代碼看起來像這樣(從給定的代碼):

import java.util.Map; 
import java.util.TreeMap; 

    public class Test { 

public static Map<String, Integer> pilots = new TreeMap<String, Integer>(); 

public static void main(String[] args) { 

    int arr[] = { 50, 150, 100, 250, 200, 24, 376, 541, 56, 164 }; 
    int arrLength = arr.length; 
    for (int i = 0; i < arrLength - 1; i++) { 
     int min = i; 
     for (int k = i + 1; k < arrLength; k++) { 
      if (arr[k] < arr[min]) { 
       min = k; 
      } 
     } 
     if (i != min) { 
      int temp = arr[i]; 
      arr[i] = arr[min]; 
      arr[min] = temp; 
     } 
    } 
    for (int j = 0; j < arrLength; j++) { 
     System.out.println(arr[j] + " "); 
    } 

    for (int p = 0; p < arrLength; p++) { 

     int pilotHours = arr[p]; 
     String pilot = "PILOT NAME, HOWEVER YOU GET IT"; 

     pilots.put(pilot, pilotHours); 

    } 
    System.out.println(pilots); 
} 
    } 

告訴我是怎麼回事,調整到適合您的代碼之後。

主要答案/建議是一起使用TreeMap

+0

@Obicere,我的壞,我的意思是一個TreeMap –

+0

如果我編譯你的代碼,它仍然排序我的數字。我把飛行員的名字?對不起,這是一個n00b,但這是我的第一個作業在Java幾經課後所以.. – user3163682

+0

@ user3163682,如果我正確理解你,在我的代碼說,'字符飛行員=「飛行員名稱,但你獲得它「;這是Pilot的名字,是一個簡單的字符串,但是如果你有一個包含飛行員名字的數組,那麼你可以簡單地把'String pilot =」PILOT NAME,但是你得到它「;'放到for循環中,設置pilot = to'pilotArray [p]'那麼它應該工作。 –

1

對飛行員的名字用的時間相應的數字。只使用小時數作爲您的選擇排序的排序標準,對(名稱,小時數)對進行排序。然後遍歷排序的數組對,只顯示飛行員的姓名,他們將按照預期的順序。

相關的解決方案是使用(索引,小時)對,其中索引指的是您原始的飛行員姓名數組。在遍歷排序的對數組時,可以使用此索引在原始數組中引用匹配的導頻名稱。這種方法可以避免在輸入或內存使用受到限制的情況下在對數組中複製試點名稱數組。

第二個解決方案的實現應該是這樣的(保留最原始的代碼):

import java.util.ArrayList; 

public class Test { 
    public static void main(String[] args) { 
     ArrayList<String> nameArr=new ArrayList<String>(); 
     nameArr.add("John"); 
     nameArr.add("Robert"); 
     nameArr.add("Duncan"); 
     nameArr.add("Steve"); 
     nameArr.add("Adrian"); 
     nameArr.add("Paul"); 
     nameArr.add("Michael"); 
     nameArr.add("Andrew"); 
     nameArr.add("Henry"); 
     nameArr.add("Bradley"); 
     int arr[]={50,150,100,250,200,24,376,541,56,164}; 
     int arrLength = arr.length; 
     assert arrLength == nameArr.size(); 

     int indexArr[]=new int[arrLength]; 
     for(int i=0;i<arrLength;i++){ 
      indexArr[i]=i; 
     } 

     for(int i=0;i<arrLength-1;i++){ 
      int min=i; 
      for (int k=i+1;k<arrLength;k++){ 
       if(arr[k]<arr[min]){ 
        min = k; 
       } 
      } 
      if (i != min) { 
       int temp=arr[i]; 
       arr[i]=arr[min]; 
       arr[min]=temp; 

       temp=indexArr[i]; 
       indexArr[i]=indexArr[min]; 
       indexArr[min]=temp; 
      } 
     } 

     for (int j=0;j<arrLength;j++) { 
      int index=indexArr[j]; 
      String name=nameArr.get(index); 
      System.out.println(name); 
     } 
    } 
} 
+0

我明白你的意思,但我不知道該怎麼做。我是幾周前開始的Java新手。你能爲我構建這個代碼嗎? – user3163682

+0

@ user3163682我編輯了答案以添加第二個解決方案的示例實現。 – user3146587