2017-02-10 56 views
0

我正在研究一個HW問題,詢問:給出一個列表L和另一個列表P,其中包含按升序排序的整數。操作printLots(L,P)將打印位於由P指定的位置的L中的元素。例如,如果P = 1,3,4,6,則位置1,3,4和6中的元素在L被打印。寫入程序printLots(L,P)。爲什麼我的迭代器不從整個鏈表中返回元素?

我只允許使用Collection中的方法,這意味着我不能使用get(index)。

但是,我的代碼只返回列表P中的最後一個元素,不是全部。我不知道什麼是錯的。

這裏是我的代碼:

public static void printLots(Collection<Integer> L, Collection<Integer> P){ 

     int size = P.size(); 

     Iterator<Integer> iter = P.iterator(); 
     int pos = 0; 
     while(iter.hasNext()){ 
      pos = iter.next(); 
     } 
     System.out.println(pos); 

     Integer [] arr = L.toArray(new Integer[size]); 
     System.out.println(arr[pos]); 


    } 

    public static void main(String[] args){ 
     Collection<Integer> L = new ArrayList<>(); 
     Collection<Integer> P = new ArrayList<>(); 
     P.add(2); 
     P.add(3); 

     L.add(1); 
     L.add(3); 
     L.add(5); 
     L.add(6); 

     printLots(L,P); 

    } 
+0

檢查while循環,它只有在閱讀的完整列表,然後打印最後.. – AxelH

+0

你也需要檢查,如果列表中包含的項目從列表拉指數 –

回答

0
public static void main(String[] args){ 
    Collection<Integer> L = new ArrayList<>(); 
    Collection<Integer> P = new ArrayList<>(); 
    P.add(0); 
    P.add(1); 
    P.add(3); 
    P.add(4); 


    L.add(1); 
    L.add(3); 
    L.add(5); 
    L.add(6); 

    printLots(L,P); 

} 

public static void printLots(Collection<Integer> L, Collection<Integer> P) { 
    Integer[] arr = L.toArray(new Integer[L.size()]); 

    Iterator<Integer> iter = P.iterator(); 
    int pos = 0; 
    while (iter.hasNext()) { 
     pos = iter.next(); 

     if (pos >= arr.length) { 
      System.out.println("Position[P] : " + pos + " " + "Location[L] : OUT OF INDEX."); 
     } else { 
      System.out.println("Position[P] : " + pos + " " + "Location[L] : " + arr[pos]);     
     } 
    } 
} 
0

更改您的代碼

while(iter.hasNext()){ 
    pos = iter.next(); 
    System.out.println(pos); 
} 
1

這裏是你的問題:

int pos = 0; 
while(iter.hasNext()){ 
    pos = iter.next(); 
} 
System.out.println(pos); 

既然你什麼都不做的循環,你最終pos是最後一個值。

int pos = 0; 
while(iter.hasNext()){ 
    pos = iter.next(); 
    System.out.println(pos); 
} 

將顯示完整列表。 PS:因爲我不確定我想要做什麼,所以我只會指出這個問題;)你從原始列表中創建一個數組。我想你想使用contains來檢查值是否存在於另一個列表中,並將其添加到數組/列表以打印結果。

0

試試這個方法:

public static void printLots(Collection<Integer> L, Collection<Integer> P) { 
     ArrayList<Integer> arrayListL = (ArrayList<Integer>) L;\ 
     System.out.println(arrayListL.stream().filter(x -> P.contains(arrayListL.indexOf(x))).collect(Collectors.toList()).toString()); 
    } 

做些什麼:

  1. 以大號裏面的每一個元素,檢查的indexOf()裏面P.
  2. 如果有,那麼篩選元素並將其添加到集合中。
  3. 打印收藏

之所以將集合L到ArrayList中,是因爲集合沒有一個定義的索引。

相關問題