2013-09-04 14 views
11

Was ist der einfachste Weg, um zwei Arrays Element-für-Element zu summieren?Summe zwei Arrays Element-für-Element in Java

Ich weiß, dass Sie eine for Schleife wie die folgenden verwenden:

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]; 
} 

aber in Sprachen wie MATLAB, können Sie die Element-für-Element-Array Summe tun, indem nur c = a + b zu schreiben. Gibt es einen einfachen Weg, dies in Java zu tun?

Die Methode, die in den Sinn kommt, ist die Verwendung der RealVector-Klasse von Apache Commons Math, aber diese Methode ist ziemlich ausführlich.

+2

Kann nicht einfacher als das bekommen, was Sie haben. – rocketboy

+0

Sie können es nicht mit Standardarrays in Java machen, aber schauen Sie sich einige Matrizenklassen an. Ich bin sicher, sie haben Summierungsmethoden, die Sie suchen, die auch hoch optimiert sind. –

+0

@ Dgrin91 Mehr optimiert als das, was er oben geschrieben hat? – crush

Antwort

9

In der Sprache gibt es sicherlich nichts zu aktivieren. Ich weiß auch nichts in den Standardbibliotheken, aber es ist trivial, den Code, den Sie geschrieben haben, in eine Hilfsmethode zu setzen, die Sie von überall aufrufen können, wo Sie sie brauchen.

+3

Es ist nur ich, der es für verrückt hält, dass die Standardbibliotheken keine elementweise Addition haben? Für eine Sprache mit so viel Schnickschnack wie Java scheint es eine ziemlich grundlegende fehlende Funktion zu sein. – Peter

1

c = a + b Gibt es eine einfache Möglichkeit, dies in Java zu tun?

Nein, nicht so einfach, weil Sie die Operatoren in Java nicht überschreiben können.

könnten Sie verwenden javax.vecmath.Vector3d (wie @crush hieß es in einem anderen Kommentar [Kredite an ihn]), die add unterstützt, aber das tut nichts anderes, als die Werte hinzufügen:

/** 
    * 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; 
} 

Sie es wie folgt verwendet werden:

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

oder Verwenden Bibliothek wie JScience welches eine mathematisch Vektor

Aber wenn Sie einen performanten Weg wollen: Ihre Lösung ist meiner Meinung nach das Beste, was Sie bekommen können!

-1

Prüfung dieser: verwendet Summen- und Übertrag

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; 
    } 
} 

Input: arr1 = {2, 1, 3}; arr2 = {3, 2};

Ausgang: c: {0, 2, 4, 5}