为了账号安全,请及时绑定邮箱和手机立即绑定

通过列表数组的Java复杂迭代

通过列表数组的Java复杂迭代

慕妹3242003 2021-05-30 19:14:18
我想遍历列表数组中的重复数字组,并在组更改时执行某些操作。我的问题是当下一组包含相同的数字时,如何将两组分开?例如,我在一个数组中3,3,3,10,10,10,10,10,10,10,10,10,10,5,5,5,5,5 有以下数字: 总是有 3 个三分球和十个十分球等。但是如果我有 3,3,3,3,3,3两组三分,我就会变得不卡。一种(某种)有效的解决方案是:List<Integer> changeOfTableCell = new ArrayList<Integer>();changeOfTableCell.add(3);changeOfTableCell.add(3);changeOfTableCell.add(3);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(10);changeOfTableCell.add(5);changeOfTableCell.add(5);changeOfTableCell.add(5);changeOfTableCell.add(5);changeOfTableCell.add(5);int startCounter=changeOfTableCell.get(0);int counter=0;for(int a=0; a<changeOfTableCell.size(); a++) {     if(startCounter==changeOfTableCell.get(counter)) { //the start of the group        for(int i=0; i<startCounter; i++) { //print the group as per the size of the group            System.out.println(changeOfTableCell.get(counter));            counter=counter+1;        }        //move the start of the next group        startCounter=changeOfTableCell.get(counter)        System.out.println("Break");//do something here    }}计数器变为 18,这给了我一个索引越界异常。解决方案对我来说并不明显,它一直让我发疯!
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

在您的第二个 for 循环之后,您应该有一个 if 保护来保护最后一次迭代。这哪里是时间counter等于的大小List,因为内部的for循环的最后一次迭代的加1计数器


if(counter < changeOfTableCell.size()){

  startCounter=changeOfTableCell.get(counter);

}

或者更确切地说是终止


if(counter >= changeOfTableCell.size()) break;

startCounter=changeOfTableCell.get(counter);


查看完整回答
反对 回复 2021-06-02
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

计数器变为 18 并抛出 IndexOutOfBoundsException,因为它counter正在跟踪它已迭代的元素数量。打印出列表中的最后一个值后,startCounter尝试获取第 18 个索引处的元素,该元素不存在(列表为 0 索引)。要修复它,请执行条件语句以检查是否counter已经在第 18 个索引处。


查看完整回答
反对 回复 2021-06-02
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这是我想出的解决方案:


public class CounterTest {


public static void main(String[] args) {


    List<Integer> changeOfTableCell = new ArrayList<Integer>();

    changeOfTableCell.add(3);

    changeOfTableCell.add(3);

    changeOfTableCell.add(3);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(10);

    changeOfTableCell.add(5);

    changeOfTableCell.add(5);

    changeOfTableCell.add(5);

    changeOfTableCell.add(5);

    changeOfTableCell.add(5);

    int start=0;

    int length=changeOfTableCell.get(0);



    for(int a=0; a<changeOfTableCell.size(); a++){


    for(int i=start; i<length; i++) {


        System.out.println(changeOfTableCell.get(start));


    }if(length==changeOfTableCell.size()){

        System.out.println("Do something ");break;

        }else start=length; length=length+changeOfTableCell.get(start);

            System.out.println("Do something ");

}

}


}


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信