2013-09-04 20 views
11

Cách dễ nhất để tổng hợp hai phần tử theo từng phần tử là gì?Tổng hợp hai phần tử theo từng phần tử trong Java

Tôi biết rằng bạn có thể sử dụng một vòng lặp for như sau:

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

Nhưng trong ngôn ngữ như MATLAB, bạn có thể làm các mảng sum yếu tố-by-phần tử bằng cách chỉ viết c = a + b. Có một cách dễ dàng để làm điều này trong Java?

Phương pháp mà bạn nghĩ đến là sử dụng lớp RealVector từ Apache Commons Math, nhưng phương pháp đó khá tiết kiệm.

+2

Không thể đơn giản hơn những gì bạn có. – rocketboy

+0

Bạn không thể làm điều đó với các mảng tiêu chuẩn trong Java, nhưng tìm kiếm một số lớp học ma trận. Im chắc chắn rằng họ có phương pháp tổng kết bạn đang tìm kiếm cũng được tối ưu hóa cao. –

+0

@ Dgrin91 Tối ưu hóa nhiều hơn những gì ông viết ở trên? – crush

Trả lời

9

Chắc chắn không có gì để bật tính năng này bằng ngôn ngữ . Tôi cũng không biết gì về các thư viện chuẩn, nhưng nó không quan trọng để đưa mã bạn đã viết vào một phương thức tiện ích mà bạn có thể gọi từ bất cứ đâu bạn cần.

+3

Nó chỉ là tôi nghĩ rằng nó là điên mà các thư viện tiêu chuẩn không có những thứ như bổ sung elementwise? Nó có vẻ giống như một tính năng thiếu cơ bản cho một ngôn ngữ với nhiều chuông và còi như Java. – Peter

1

c = a + b Có cách nào dễ dàng để thực hiện điều này trong Java không?

Không, điều này không dễ dàng vì bạn không thể ghi đè toán tử trong java.

Bạn có thể sử dụng javax.vecmath.Vector3d (như @crush nói nó trong bình luận khác [tín với anh]) mà hỗ trợ add nhưng điều này không gì hơn là thêm các giá trị:

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

bạn sử dụng nó như thế này:

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

hoặc thư viện Sử dụng như JScience trong đó có một mathematical- Vektor

Nhưng nếu bạn muốn có một cách thực hiện: giải pháp của bạn là tốt nhất bạn có thể nhận được trong quan điểm của tôi!

-1

việc kiểm tra này một: sử dụng tổng hợp và thực hiện

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

Đầu ra: c: {0, 2, 4, 5}