实际上,我想将所有不同的子集存储在0 [nature, car]
1 [view, technology]
2 [feel, great, trees]
3 [excited, concert]
4 [computer, mobile]
ArrayList中。我不想更改列表的数据类型,这是其他一些方法所必需的。我得到的问题是,如果在添加值的循环之外进行访问,则res的值会更改。更改后的值是列表中的最后一个值,该值被复制到每个位置或其他位置。谁能解决这个错误?
我还使用res
重置字符串的值,而不是删除。
当我在将值输入列表之后(setlength()
之后)最后使用delete时,所有值都变为空,而当我将res.add(counter)
放在初始for循环之后时,列表中的所有值都将获得更新为最后一个元素值。
delete()
答案 0 :(得分:0)
您总是将sbFinal
添加到ArrayList
中,因此您的ArrayList
仅包含大量这些内容。
只需替换为res.add(counter, sb);
,然后将其重新放置到创建它的位置即可。
顺便说一句:您确实应该考虑存储String
而不是StringBuilder
。
static List<StringBuilder> printPowerSet(int set[], int set_size) {
long pow_set_size = (long) Math.pow(2, set_size);
List <StringBuilder> res=new ArrayList<>();
for(int counter = 0; counter < pow_set_size; counter++) {
for(int j = 0; j < set_size; j++) {
if((counter & (1 << j)) > 0) {
StringBuilder temp = new StringBuilder(String.valueOf(set[j])
res.add(temp);
}
}
System.out.println(res.get(counter)); //the value here is displaying fine
}
for(StringBuilder check:res)
{
System.out.println(check); // the values are changed here with last element value
}
return res;
}