Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在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 - Fatal编程技术网

在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;

}