【问题标题】:How to iterate thru an arraylist and do an action every X times using for loops? Java如何使用 for 循环遍历数组列表并每 X 次执行一次操作?爪哇
【发布时间】:2017-09-12 01:28:29
【问题描述】:

我正在尝试遍历由已解析 HTML 行组成的字符串 ArrayList。如何使用双 for 循环打印 0-353,同时每 4 打印一行?感谢大家的帮助

我必须做的是去每一行,检查它是否是世界、国家、成员或活动。我会将所有 4 个数据添加到一个对象中,每次我完成填充对象时,我必须启动一个新对象以添加到我的对象的另一个数组列表中。

<a id='slu-world-301' class='server-list__world-link'        href='http://oldschool.runescape.com/game?world=301'>Old School 1</a>
<td class='server-list__row-cell server-list__row-cell--country server-list__row-cell--US'>United States</td>
<td class='server-list__row-cell server-list__row-cell--type'>Free</td>
<td class='server-list__row-cell'>Trade - Free</td>
<a id='slu-world-302' class='server-list__world-link' href='http://oldschool.runescape.com/game?world=302'>Old School 2</a>
<td class='server-list__row-cell server-list__row-cell--country server-list__row-cell--GB'>United Kingdom</td>
<td class='server-list__row-cell server-list__row-cell--type'>Members</td>
<td class='server-list__row-cell'>Trade - Members</td>
<a id='slu-world-303' class='server-list__world-link' href='http://oldschool.runescape.com/game?world=303'>Old School 3</a>
<td class='server-list__row-cell server-list__row-cell--country server-list__row-cell--DE'>Germany</td>
<td class='server-list__row-cell server-list__row-cell--type'>Members</td>
<td class='server-list__row-cell'>-</td>

我当前的代码:

for(int i=1;i<(strs.size() / 4) + 1;i++){
    for(int j=0;j<4;j++){
        System.out.println(???? WHAT DO I PUT HERE ????)
    }
        System.out.println("-----------------");
}

【问题讨论】:

  • 您的代码中的strs 是什么?什么不适合你?
  • 您是要打印出 html 的每一行还是只打印 0-353 的整数?
  • strs 的大小如何?它似乎是 354,因此你得到的值高达 351,因为 354/4=88。要获得 tge 所需的输出,请使用 i
  • 好吧,我有一行 html 用于成员、世界、国家和活动,它们都是一致的,但我需要每 4 个将它添加到一个对象中,而不是创建一个新对象。 strs是我已经解析的html,如果需要我可以发布整个代码吗?

标签: java loops for-loop arraylist


【解决方案1】:

我推荐使用 % this Remainder 运算符
参考https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

0 % 4 = 0   
1 % 4 = 1   
2 % 4 = 2   
3 % 4 = 3   
4 % 4 = 0



for(int i = 0; i < strs.size(); i++){
    System.out.println(i);
    if (i%4 == 3) {
        System.out.println("---------");
    }
}

输出是

0
1
2
3
---------
4
5
6
7
---------
8
9
10
11
---------

如果代码在下面

for(int i=0;i<strs.size();i++) {
    if(i%4 ==0) {
        System.out.println("---------");
    } 
    System.out.println(i);
}

输出将是

 ------------ //will more one ----- because 0 % 4 = 0
 0
 1
 2
 3
 ------------
 4
 5
 6
 7
 ------------
 8
 9

【讨论】:

    【解决方案2】:

    它打印我们唯一的 0-351 的原因是

    i<(strs.size() / 4)
    

    因为strs.size() = 354 或353(来自 cmets),你的外循环变成了

    for(int i=0;i< 88;i++)
    

    因此您达到了87*4 + 3 => 351 的最大值。


    你可以改为迭代为:

    for(int i=0;i<strs.size();i++) {
        if(i%4 ==0) {
            System.out.println("---------");
        } 
        System.out.println(i);
    }
    

    【讨论】:

    • strs.size() 仅等于 353,但每 4 项必须是对象的末尾,并且必须允许一个新的,以便它可以每 4 继续。
    • @Kushroom 您的情况的结果仍然相同,因为 353/4 也会导致 i&lt;88
    • 这在我重新改变方法后确实奏效了。
    • @Kushroom Cool (y) 很高兴知道我能提供帮助。
    猜你喜欢
    • 2017-10-27
    • 2015-05-13
    • 2020-10-04
    • 2015-11-25
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多