2017-04-17 218 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,列表大小,或计算出的值,这取决于你的逻辑语句得到执行