Более быстрый способ обрыва цикла или счетчика приращений? - PullRequest
0 голосов
/ 06 октября 2018

Есть ли более быстрый способ увеличить счетчик или выйти из внешнего цикла?

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

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

Ответы [ 4 ]

0 голосов
/ 06 октября 2018

Определенно есть лучший способ написания кода:

for (int i = 0; i < myArrayList.size(); i++) {
    if (myArrayList.get(i) <= myNumber) break;
    //Some operations...
}
0 голосов
/ 06 октября 2018

Вам необходимо сначала проверить размер, чтобы избежать выхода за пределы списка и появления ошибки.

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
0 голосов
/ 06 октября 2018

Я думаю, вы хотите начать отсчет с некоторого индекса i,

int count=0;
    for( ;((i < myArrayList.size()-1) && (myArrayList.get(i) > myNumber));i++){
        count++;
    }
0 голосов
/ 06 октября 2018

Цикл 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++;
    }
}
...