2016-03-01 65 views
-2

給定一個數組,從數組中打印出所有非重複和非相同排列對。數組不包含重複的元素。 如:從一個數組中打印對的唯一排列

String[] array = {"Cheese", "Pepperoni", "Black Olives", "Chicken"} 

期望輸出示例:

  1. 奶酪,辣
  2. 奶酪,黑橄欖
  3. 奶酪,雞肉
  4. 黑橄欖,辣 ...

I NVALID:

  1. 奶酪,奶酪
  2. 奶酪,辣
    辣,奶酪

只有1雙輸入。 [奶酪,意大利辣香腸]或[意大利辣香腸,奶酪]

private Map<Integer, List<String>> getPairs(String[] array) { 
     Map<Integer, List<String>> map = new HashMap<>(); 
     int count = 0; 

     for (int i = 0; i < array.length; i++) { 
      for (int j = 0; j < array.length; j++) { 
       if (i == j) 
        continue; 
       ArrayList<String> list = new ArrayList<>(); 
       list.add(array[i]); 
       list.add(array[j]); 
       map.put(count, list); 
       ++count; 
      } 
     } 
     // System.out.println(map); 
     return map; 
    } 

我的代碼打印出重複項。你能幫忙嗎?

+0

@HovercraftFullOfEels加入實現。但我沒有得到它的工作。這不是一項功課。 –

+0

注意:'count == map.size()'在內循環之前和之後,所以'count'是多餘的。此外,由「元素索引」鍵控的地圖可能更簡單一些,就像List一樣:你仍然可以訪問第i個元素。 –

+0

該輸出是*期望*輸出還是*實際*輸出?無論如何,請提供另一個。在給定的輸出中沒有重複。 –

回答

3

改變內心的for循環聲明來自:

for (int j = 0; j < array.length; j++) { 

for (int j = i + 1; j < array.length; j++) { 

提供array元素不包含重複的,這樣就避免了這兩個 「奶酪,奶酪」 的情況下(因爲ji永遠不會相等),而自j以來的「奶酪,意大利辣香腸」和「意大利辣香腸,奶酪」案例永遠不會少於i

(該if (i == j) continue;然後冗餘太)

+0

謝謝。有效。對不起,我無法贊成你的答案,我缺乏聲譽。再次感謝你。你太棒了。 –

+0

是的,該數組不包含重複的元素。感謝您的更新答案。 –

+1

這是一個upvote。謝謝你幫助肖恩。 – Drew