2011-10-07 95 views
1

做作業,我卡住了。基於位置的Java打印

比方說,我有一個數組的顏色:

["blue", "orange", "green", "black", "red" ] 

,並出現在文本這些顏色。當顏色出現時,會有另一個數組將行號存儲在另一個數組(位置數組)中。

[17,4,5,8,8]

現在我想通過上升線發生打印故輸出將是:

orange 
green 
black 
red 
blue 

我使用Arrays.sort()來排序位置數組。 我相信這應該用位置來完成。

例如,對於打印橙色,存在排序陣列與陣列顏色上顏色位置的關係。

你能指點我嗎?

正如我開始學習java這樣做是儘可能簡單的方式。

回答

2
  1. 您需要將這些索引相互關聯。我建議你在一堂課中做到這一點(可能是Pair班,其屬性爲String colorint line)。

    class Pair { 
        public String color; 
        public int line; 
        public Pair(String color, int line) { 
         this.color = color; 
         this.line = line; 
        } 
    } 
    
  2. 建立一個數組(或List<Pair>)成對對象。

    String[] colors = new String[] {"blue", "orange", "green", "black", "red"}; 
    int[] lines  = new int[] { 17,  4,  5,  8,  8}; 
    
    List<Pair> pairs = new LinkedList<Pair>(); 
    for (int i = 0; i < colors.length; i++) 
        pairs.add(new Pair(colors[i], lines[i])); 
    
  3. 排序的Pair s的一個Comparator使用Arrays.sort(或Collection.sort)陣列方法取決於你line屬性。

    Collections.sort(pairs, new Comparator<Pair>() { 
        public int compare(Pair p1, Pair p2) { 
         return Integer.valueOf(p2.line).compareTo(p1.line); 
        } 
    }); 
    

    另一種選擇是在Pair實施Comparable<Pair>

  4. 打印使用循環

+0

現在剛開始學習java,因此必須儘可能簡單地完成。我知道如何做第4步 – Favolas

+0

@Favolas:添加了一些代碼來幫助解釋:) – dacwe

0

我可能會使用SortedMap

+0

剛剛開始,現在學習java所以這因爲它得到做一樣簡單。 – Favolas

0

這對我的作品和輸出數組:

橙 - 4
綠色 - 5
黑 - 8
紅 - 8
blue - 17

〔實施例代碼:

public class Test 
{ 
    public String color; 
    public int line; 

    Test(String color, int line) { 
     this.color = color; 
     this.line = line; 
    } 

    public static void main(String[] args) 
    { 
     String[] colors = new String[] { "blue", "orange", "green", "black", "red" }; 
     int[] lineNumber = new int[] { 17,4,5,8,8 }; 

     LinkedList<Test> out = new LinkedList<Test>(); 

     // add first element 
     out.add(new Test(colors[0], lineNumber[0])); 

     Loop: for(int i = 1; i < colors.length; i++) { 
      for(int j = 0; j < out.size(); j++) { 
       if(lineNumber[i] < out.get(j).line) { 
        out.add(j, new Test(colors[i], lineNumber[i])); 
        continue Loop; 
       } 
      } 

      out.addLast(new Test(colors[i], lineNumber[i])); 
     } 

     for(Test t : out) { 
      System.out.println(t.color + " - "+t.line);   
     } 
    }  
} 
0

您可以使用HashMap。 因此,對於每種顏色,您都有一個顏色名稱爲 的Key,對於該Key,您將需要某種整數列表。

所以,我建議是..

Map<String color, List<Integer> location> hashMap = new HashMap<String Color, List<Integer> location>(); 
如果你想添加你的位置

hashMap.get("orange").add(1); 

這意味着您想要獲取橙色列表並將值1添加到該列表中。

所以,如果你想要遍歷該列表中你會做..

List<Integer> location = hashMap.get("orange"); returning the whole orange list 

然後

for(Integer int : location) 
{ 
    //Do whatever 
} 
+0

現在就開始學習java,所以必須儘可能簡單地完成。將編輯第一篇文章說 – Favolas