Есть ли способ, которым я могу умножить первый и последний элементы в этом списке? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь умножить первый элемент этого списка на последний элемент, а затем второй-первый элемент на второй-последний элемент и так далее.Есть ли лучший способ сделать это?попытался сделать это, но я читаю один и тот же элемент 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;
        }

    }

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Это работает:

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++;
  }
0 голосов
/ 30 января 2019

Как вы упомянули, что вы не имеете дело с нечетными элементами, это будет работать

        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;
        }
0 голосов
/ 30 января 2019

Используя API Java-8, вы можете использовать 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;}));
} 
0 голосов
/ 30 января 2019

Начните с цикла по индексу от 0 до половины длины вашего массива.Затем умножьте элемент по индексу на элемент array length - index - 1.

for(int index = 0; index < (list.size() / 2); index++) {
    sum += (list.get(index) * list.get(list.size() - index - 1));
}
...