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循环条件行中?如果是这样,那会比现在更有效吗?
答案 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/