2013-09-04 17 views
11

Jaki jest najprostszy sposób na sumowanie dwóch tablic element po elemencie?Sumuj dwie tablice element po elemencie w Javie

wiem, że można użyć for pętli takich jak:

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

Ale w językach takich jak MATLAB, można zrobić sumę element po elemencie tablicy po prostu pisząc c = a + b. Czy jest to łatwy sposób w Javie?

Metoda, która przychodzi na myśl, to użycie klasy RealVector z Math Apache Commons, ale ta metoda jest dość gadatliwa.

+2

Może nie było prostsze niż to, co masz. – rocketboy

+0

Nie możesz tego zrobić za pomocą standardowych tablic w Javie, ale przejrzyj niektóre klasy matricies. Jestem pewien, że mają one metody sumowania, których szukasz, które są również wysoce zoptymalizowane. –

+0

@ Dgrin91 Bardziej zoptymalizowany niż to, co napisał powyżej? – crush

Odpowiedz

9

Z pewnością nie ma nic, aby włączyć tę funkcję w języku w języku. Nie znam też niczego w standardowych bibliotekach, ale łatwo jest umieścić kod, który napisałeś, w metodzie narzędzia, z której możesz dzwonić z dowolnego miejsca.

+3

Tylko ja uważam, że to szaleństwo, że standardowe biblioteki nie mają takich elementów jak elementwise addition? Wygląda to na całkiem podstawową brakującą cechę języka z tak wieloma dzwonkami i gwizdami jak Java. – Peter

1

c = a + b Czy jest to prosty sposób w Javie?

Nie jest to łatwe, ponieważ nie można przesłonić operatorów w języku Java.

Można użyć javax.vecmath.Vector3d (jak @crush stwierdzono, że w innym Komentarz [do niego] kredyty), który wspiera add ale to nie robi nic więcej niż dodawanie wartości:

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

go używać tak:

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

lub użycie biblioteki takie jak JScience który ma mathematical- Vektor

Ale jeśli chcesz mieć skuteczny sposób: twoje rozwiązanie jest najlepsze, jakie mogę dostać w mojej opinii!

-1

sprawdzenie ten potrzebne suma i przeprowadzić

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

Wejście: ARR1 = {2, 1, 3}; arr2 = {3, 2};

wyjściowa: c: {0, 2, 4, 5}