如何对arraylist进行追加更改

时间:2017-04-17 15:50:32

标签: java

我制作了这段代码,我想知道我错过了什么,因为当我返回列表时,我对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;
}

2 个答案:

答案 0 :(得分:0)

在最后返回列表之前,您需要通过调用jnewnum的旧值替换为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,列表大小或计算值,具体取决于您执行的逻辑语句