2013-09-04 6 views
11

Что является самым простым способом суммировать два массива по элементам?Суммировать два массива по элементам в Java

Я знаю, что вы можете использовать for цикл, такие как:

int[] a = {0, 1, 2}; 
int[] b = {3, 4, 5}; 
int[] c = new int[a.length]; 
for (int i = 0; i < a.length; ++i) { 
    c[i] = a[i] + b[i]; 
} 

Но в таких языках, как MATLAB, вы можете сделать элемент-поэлементной сумму массива, просто писать c = a + b. Есть ли простой способ сделать это на Java?

Метод, который приходит на ум, использует класс RealVector из Apache Commons Math, но этот метод довольно подробный.

+2

Может не получить ничего проще, чем то, что у вас есть. – rocketboy

+0

Вы не можете сделать это со стандартными массивами на Java, но посмотрите на некоторые классы матриц. Я уверен, что у них есть методы суммирования, которые вы ищете, которые также сильно оптимизированы. –

+0

@ Dgrin91 Больше оптимизирован, чем написал выше? – crush

ответ

9

Существует, конечно, ничего, чтобы включить это в язык . Я ничего не знаю ни в стандартных библиотеках, но тривиально положить код, который вы написали, в метод утилиты, который вы можете позвонить из любой точки, где вам это нужно.

+3

Это только я, кто думает, что это безумие, что стандартные библиотеки не имеют таких вещей, как элементное дополнение? Это кажется довольно простой недостающей особенностью для языка с таким количеством колоколов и свистков, что и Java. – Peter

1

c = a + b Есть ли простой способ сделать это на Java?

Нет. Это не так просто, потому что вы не можете переопределить операторов в java.

Вы можете использовать javax.vecmath.Vector3d (как @crush сказал, что в другом комментарии [Балла ему]), который поддерживает add, но это не делает ничего больше, чем добавление значения:

/** 
    * Sets the value of this tuple to the vector sum of itself and tuple t1. 
    * @param t1 the other tuple 
    */ 
public final void add(Tuple3d t1) { 
    x += t1.x; 
    y += t1.y; 
    z += t1.z; 
} 

вы используете это так:

vectorC = vectorA.copy().add(vectorB); 
//you need to copy the vectorA because add manipulates the object your calling it on 

или использования библиотеки, такие как JScience, который имеет в математическом Vektor

Но если вы хотите выполнить исполнительский способ: ваше решение - лучшее, что вы можете получить, на мой взгляд!

-1

проверка это: используется сумма и нести

public class SumOfTwoArrays{  

    public static int[] sumOfTwoArrays(int[] arr1, int[] arr2){ 

     int na = arr1.length; 
     int nb = arr2.length; 
     int nc; 
     int min; 

     if(na > nb){ 
      nc = na + 1; 
      min = nb; 
     }else{ 
      nc = nb + 1; 
      min = na; 
     } 

     int[] c = new int[nc]; 
     int sum = 0; 
     int carry = 0; 
     int i = na - 1; 
     int j = nb - 1; 
     int k = nc - 1; 

     while(i >= 0 && j>=0){ 
      sum = arr1[i] + arr2[j] + carry; 
      i--; 
      j--; 
      c[k] = sum % 10; 
      sum = sum/10; 
      carry = sum % 10; 
      k--;   
     }//end of while loop 

     while(i >= 0){   //n2 has exhausted 
      sum = arr1[i] + carry; 
      c[k] = sum % 10; 
      sum = sum/10; 
      carry = sum % 10; 
      i--; 
      k--; 
     } 

     while(j >= 0){  //n1 has exhausted 
      sum = arr2[j] + carry; 
      c[k] = sum % 10; 
      sum = sum/10; 
      carry = sum % 10; 
      k--;   
      j--; 
     } 

     c[k] = carry; 

     return c; 
    } 
} 

Входной сигнал: arr1 = {2, 1, 3}; arr2 = {3, 2};

Выход: с: {0, 2, 4, 5}

Смежные вопросы