我制作了这段代码,我想知道我错过了什么,因为当我返回列表时,我对j的位置所做的新改变不起作用!
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 :(得分:0)
在最后返回列表之前,您需要通过调用j
将newnum
的旧值替换为list.set(j, newnum)
。
更好的是,返回列表的副本而不是修改原始列表。虽然在这种情况下对列表的修改是微不足道的,但通常最好不要修改传递给方法的参数。也就是说,保持你的方法没有“副作用” - 而不是修改传入的列表,在这种情况下你返回一个新的列表。
例如:
List<Integer> copiedList = new ArrayList<Integer>(list);
copiedList.set(j, newnum);
return copiedList;
答案 1 :(得分: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,列表大小或计算值,具体取决于您执行的逻辑语句