我可以将此语句放在for循环中吗?

时间:2017-12-05 22:05:46

标签: java for-loop

for (int i = 0; i < numArray.size(); i++) {
    if (numArray.get(i) % 2 == 0) {
        evenSum += numArray.get(i);
        outputArea.append(numArray.get(i) + "\n");
    }
}

有没有办法获得这条线

if (numArray.get(i) % 2 == 0) {
在for循环条件行中

?如果是这样,那会比现在更有效吗?

2 个答案:

答案 0 :(得分:2)

您可以将条件置于for循环中:

for (int i = 0; (i < numArray.size()) && (numArray.get(i) % 2 == 0); i++) {
    evenSum += numArray.get(i);
    outputArea.append(numArray.get(i) + "\n");
}

但是,它会改变循环正在做的事情,因为它会在遇到奇数时立即停止。这可能是也可能不是你想要的,但肯定不同于原始代码,它继续贯穿整个数组。

如果你想迭代整个数组,最好使用foreach版本的迭代,让编译器产生最快的代码:

for (int num : numArray) {
    if (num % 2 == 0) {
        evenSum += num;
        outputArea.append(num).append("\n");
    }
}

答案 1 :(得分:0)

我认为你在ArrayList中对偶数进行求和,你要求更高的效率,所以你去,而不是使用.get()我们将使用迭代器,因为它会加快速度,我们将使用另一种更快的方法来检查如果数字是偶数:

package com.company;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Main {


    public static void main(String[] args) throws InterruptedException {

     int sum = 0;
     List<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));

     Iterator<Integer> iter = numbers.iterator();
     int num;

     while(iter.hasNext()){
         if (((num = iter.next()) & 1) == 0) // number is even
             sum += num;
     }

        System.out.println("Sum of all even numbers is: " + sum);

    }

}

如果你有一个非常大的列表,那么与原始代码相比,它会加快速度。

编辑:

以下是您可以学习的资源:

http://www.javainterviewpoint.com/check-number-even-odd-modulo-division-operators-java/

Iterator vs for