2017-04-17 174 views
0

我做了這段代碼,我想知道我錯過了什麼,因爲當我返回列表時,我對j的位置做出的新更改不起作用!如何使append更改爲arraylist

static ArrayList<Integer> SmallChange(ArrayList<Integer> list, int j){ 
    int change = CS2004.UI(-5, 5); // this just makes a random int between -5 and 5. 
    int newnum = change += list.get(j); 
    if (newnum > list.size()){ 
     newnum = list.size(); 
    } 
    else if (newnum < 0){ 
     newnum = 0; 
    } 
    System.out.println(list); 
    return list; 
} 
+0

您需要把'newnum'放回列表中。 'list.set(j,newnum)'。 – yshavit

+0

有趣,所以這個基於j的位置將它添加到列表中? – MCJailBreaker

+0

是的。請參閱:https://docs.oracle.com/javase/7/docs/api/java/util/List.html#set(int,%20E) – yshavit

回答

0

您需要通過調用list.set(j, newnum)你在最後返回列表之前newnum取代的j舊值。

更好的是,返回列表的副本,而不是修改原始列表。雖然在這種情況下對列表的修改很簡單,但通常最好不要修改傳入方法的參數。也就是說,保持你的方法沒有「副作用」 - 而不是修改傳入的列表,在這種情況下返回一個新列表。

例:

List<Integer> copiedList = new ArrayList<Integer>(list); 
copiedList.set(j, newnum); 
return copiedList; 
0

要修改用新的號碼,你將需要添加新的計算數量回到列表位置j你可以用set命令來完成這一名單。

你的代碼看起來應該像下面

static ArrayList<Integer> SmallChange(ArrayList<Integer> list, int j){ 
    int change = CS2004.UI(-5, 5); // this just makes a random int between -5 and 5. 
    int newnum = change += list.get(j); 
    if (newnum > list.size()){ 
     newnum = list.size(); 
    } 
    else if (newnum < 0){ 
     newnum = 0; 
    } 
    list.set(j, newnum); 
    System.out.println(list); 
    return list; 
} 

這將設置索引j要麼0,列表大小,或計算出的值,這取決於你的邏輯語句得到執行