【问题标题】:Quicker way to break loop or increment counter?更快的方法来打破循环或增加计数器?
【发布时间】:2019-03-11 17:59:45
【问题描述】:

有没有更快的方法来增加计数器或从外部循环中断?

while(myArrayList.get(i) > myNumber) {
    // some operations

    if(i + 1 < myArrayList.size())
        i++;
    else
        break;
}

【问题讨论】:

  • “更快”以什么方式?
  • @KevinAnderson Quicker => 更好,更快并不总是更好。 ;)
  • 如果您的 ArrayList 中没有任何成员大于 myNumber,则代码最终会导致 OutOfBoundException。

标签: java loops while-loop counter break


【解决方案1】:

for 循环在这里更合适:

int counter = 0

for(int i = 0; i < myArrayList.size(); i++) {
    if(!(myArrayList.get(i) > myNumber)) {
        break;
    }

    counter++;
}

如果意图是计算大于myNumber 的值,那么break 可能会排除某些值(除非您知道myArrayList 已排序),而循环应该是:

for(int i = 0; i < myArrayList.size(); i++) {
    if(myArrayList.get(i) > myNumber) {
        counter++;
    }
}

【讨论】:

  • 第一种情况,你只需要在柜台上。
  • @PeterLawrey 我也这么认为,但似乎目标是计算满足!(myArrayList.get(i) &gt; myNumber) 条件的元素,在这种情况下,我想计数将在循环外使用。
  • 问题似乎是关于如何打破循环。如果你计算通过测试的那些,你不会使用break;
  • @PeterLawrey 对。 Breaking 正是第一个 sn-p 所做的。第二个 sn-p 用于计数的情况(虽然这不是问题,但我怀疑它可能是目标,因为i 的范围比while 循环更广泛)
【解决方案2】:

您需要先检查大小以避免超出列表末尾并出现错误。

int i;
for (i = 0; i < myArrayList.size(); i++) 
    if (myArrayList.get(i) <= myNumber)
        break;

使用 Streams API 你可以做到

int n = IntStream.range(0, myArrayList.size())
                 .filter(i -> myArrayList.get(i) <= myNumber)
                 .findFirst()
                 .orElse(myArrayList.size()); // or -1

【讨论】:

    【解决方案3】:

    我想你想从某个索引开始计数i

    int count=0;
        for( ;((i < myArrayList.size()-1) && (myArrayList.get(i) > myNumber));i++){
            count++;
        }
    

    【讨论】:

    • 你最喜欢先检查尺寸。
    • 我认为) 太多了,如果你有i,为什么还需要j,因为它应该总是一样的?
    • 我认为他可能想从so index i mid way 开始计数
    【解决方案4】:

    肯定有更好的编写代码的方法:

    for (int i = 0; i < myArrayList.size(); i++) {
        if (myArrayList.get(i) <= myNumber) break;
        //Some operations...
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-10
      • 2016-02-24
      • 1970-01-01
      • 2015-11-05
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2023-03-26
      相关资源
      最近更新 更多