2017-07-27 76 views
-3

我正在嘗試迭代和組合列表中的值。我的清單是[A,B,C,D]。我正在尋找一種方法來輸出以下內容。如何組合列表中的元素而不使用Java重複使用

AB 
AC 
AD 
BC 
BD 
CD 

這裏是我的代碼:

List<String> list = new ArrayList<>(); 
    list.add("A"); 
    list.add("B"); 
    list.add("C"); 
    list.add("D"); 
     for (int i = 0; i<list.size()-1; i++){ 
     for (int k = 0; k<list.size()-1; k++){ 
      if (list.get(i)!=list.get(k+1)){ 
       System.out.println(list.get(i)+list.get(k+1)); 
       } 
      } 
     } 

代碼輸出

AB 
AC 
AD 
BC 
BD 
CB //Note this value: I already have BC -- and I consider BC==CB 
CD 

我不知道,如果掃描儀是一個不錯的選擇...... 它變得更加混亂,如果我有更多的列表中的元素。列表中的更多項目意味着更多重複項目,例如xx,yy,xy yx。

+0

網頁上有一篇關於如何生成組合的文章。請做一些**研究**。 – Andreas

+0

我真的不明白這個問題是否有效,並且有100萬個答案,您可以將其標記爲重複並參考答案。更容易成爲團隊的一員...... – Moe

回答

2
List<String> list = new ArrayList<>(); 
    list.add("A"); 
    list.add("B"); 
    list.add("C"); 
    list.add("D"); 
    for (int x = 0; x < list.size() - 1; x++){ 
     for (int y = x + 1; y < list.size; y++){ 
      System.out.println(list.get(x) + list.get(y); 
     } 
    } 

內循環應該從外循環的索引+ 1開始,直到列表結束。這將工作假設您沒有重複list

此外,要比較字符串,您將需要使用.equals()==將總是爲false如果它們是兩個不同String實例即:

String a = "apple" //Same value but twi different String instances 
String b = "apple" 
System.out.println(a==b) // Prints false 
System.out.println(a.equals(b)) Prints true 

==操作者比較對象引用不是,其中作爲.equals()在兩個對象的進行比較。因此==將檢查兩個對象是否引用相同的String實例。

+0

謝謝匿名!我非常感謝包括詳細解釋! – Moe

+0

當然沒問題:) – anon

0

將第二個循環更改爲從i+1開始迭代。這應該給所有的排列。以下是更改後的循環:

 for (int i = 0; i < list.size() - 1; i++) 
     {   
      for (int k = i+1; k < list.size(); k++) 
      { 
       System.out.println(list.get(i)+list.get(k)); 
      } 
     } 
相關問題