在Java中创建列表列表时出现意外输出 类解决方案{ 公共列表大组位置(字符串S){ //int k=0; 列表l1=新的ArrayList(); 列表l2=新的ArrayList(); int n=S.长度(); 整数计数=1,i1=0,i2=0; 对于(int i=1;i=3){ l1.添加(i1); l1.添加(i2); l2.添加(l1); } 计数=1; i1=i; } } 返回l2; } }
我需要这个输出在Java中创建列表列表时出现意外输出 类解决方案{ 公共列表大组位置(字符串S){ //int k=0; 列表l1=新的ArrayList(); 列表l2=新的ArrayList(); int n=S.长度(); 整数计数=1,i1=0,i2=0; 对于(int i=1;i=3){ l1.添加(i1); l1.添加(i2); l2.添加(l1); } 计数=1; i1=i; } } 返回l2; } },java,arraylist,Java,Arraylist,我需要这个输出[[3,5],[6,9],[12,14],但我得到的是[[3,5,6,9,12,14],[3,5,6,9,12,14],[3,5,6,9,12,14],如果我在其他部分使用l1.clear(),那么l2中也会发生变化您正在将所有整数添加到同一个内部列表中(在方法开始时使用语句List l1=new ArrayList();创建的一个) 在向列表中添加元素之前,应创建一个新的列表: class Solution { public List<List<Integer
[[3,5],[6,9],[12,14]
,但我得到的是[[3,5,6,9,12,14],[3,5,6,9,12,14],[3,5,6,9,12,14]
,如果我在其他部分使用l1.clear(),那么l2中也会发生变化您正在将所有整数添加到同一个内部列表中(在方法开始时使用语句List l1=new ArrayList();
创建的一个)
在向列表中添加元素之前,应创建一个新的列表
:
class Solution {
public List<List<Integer>> largeGroupPositions(String S) {
//int k=0;
List<Integer> l1 = new ArrayList<Integer>();
List<List<Integer>> l2 = new ArrayList<List<Integer>>();
int n = S.length();
int count =1, i1=0, i2=0;
for(int i=1; i<n; i++){
if(S.charAt(i)==S.charAt(i-1)){
count++;
}else{
i2 = i-1;
if(count>=3){
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
return l2;
}
}
for(int i=1;i=3){
列表l1=新的ArrayList();
l1.添加(i1);
l1.添加(i2);
l2.添加(l1);
}
计数=1;
i1=i;
}
}
因为您将缓存数组(列表l1=new ArrayList();)设置为全局
所以每次添加时,都会添加到同一个数组中。而且不能只清除它,因为将它添加到l2中,清除l1也会像在l2中一样清除数组
原因是,当您将l1添加到l2时,它不会将l1的值复制到l2中,而是将l1的指针(或引用)添加到l2中。因此,它实际上只有一个支持数组
试着这样做:
for(int i=1; i<n; i++) {
if(S.charAt(i)==S.charAt(i-1)) {
count++;
} else {
i2 = i-1;
if(count>=3) {
List<Integer> l1 = new ArrayList<Integer>();
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
类解决方案{
公共列表大组位置(字符串S){
//int k=0;
列表l2=新的ArrayList();
int n=S.长度();
整数计数=1,i1=0,i2=0;
对于(int i=1;i=3){
列表l1=新的ArrayList();
l1.添加(i1);
l1.添加(i2);
l2.添加(l1);
}
计数=1;
i1=i;
}
}
返回l2;
}
您调试了吗?问题是您正在重用l1
。将l1
的声明移动到if(count>=3)中
conditional。阅读一些关于如何调试问题的提示。@rishabh\u 95实际上没有其他方法,因为您不能重用同一个列表实例。为什么您认为您不能创建这样的列表?@rishabh\u 95您注意到我移动了list l1=new ArrayList()
语句?你说的我不能创建新列表是什么意思?
class Solution {
public List<List<Integer>> largeGroupPositions(String S) {
//int k=0;
List<List<Integer>> l2 = new ArrayList<List<Integer>>();
int n = S.length();
int count =1, i1=0, i2=0;
for(int i=1; i<n; i++){
List<Integer> l1 = new ArrayList<Integer>();
if(S.charAt(i)==S.charAt(i-1)){
count++;
}else{
i2 = i-1;
if(count>=3){
List<Integer> l1 = new ArrayList<Integer>();
l1.add(i1);
l1.add(i2);
l2.add(l1);
}
count =1;
i1=i;
}
}
return l2;
}