我正在尝试将此列表的第一个元素乘以最后一个元素,然后将第二个第一个元素乘以第二个最后一个元素,依此类推。我有更好的方法吗?试图这样做,但是我在内部循环中读了3次相同的元素。
long sum = 0;
long temp = 0;
for (int i = 0; i < list.size() / 2; i++) {
for (int j = list.size() - 1; j >= list.size() / 2; j--) {
temp = list.get(j) * list.get(i);
sum += temp;
}
}
答案 0 :(得分:1)
首先循环遍历从0到数组长度一半的索引。然后将索引处的项目与array length - index - 1
处的项目相乘。
for(int index = 0; index < (list.size() / 2); index++) {
sum += (list.get(index) * list.get(list.size() - index - 1));
}
答案 1 :(得分:1)
正如您所提到的,您不会处理奇数元素,这会起作用
long sum=0;
long temp=0;
for(int i=0;i<list.size()/2;i++)
{
temp=list.get(i)*list.get(list.size()-i-1);
sum+=temp;
}
答案 2 :(得分:1)
使用Java-8 API,您可以使用IntStream
遍历List
索引,并使用reduce
将第一个和最后一个元素相乘并将其累加起来。
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
int size = list.size() - 1;
System.out.println(IntStream.range(0, list.size()/2).reduce(0, (acc, ele) -> { acc += list.get(ele) * list.get(size - ele); return acc;}));
}
答案 3 :(得分:0)
这有效:
int i = list.size() / 2;
int j = list.size() - 1;
while (i < list.size() / 2) {
while ( j >= list.size() / 2;) {
temp = list.get(j) * list.get(i);
sum += temp;
j--;
break;
}
i++;
}