2013-10-14 24 views
0

可以說排列一[2/3, 0, -1, 0, 7/2]和數組二[0, 0, -2/3, 1, 0, 0]所以我想我的結果數組爲[0, 2/3, -2/3, 0, 0, 7/2]。結果數組長度將是兩個數組之間的最大長度。我怎樣才能在Java中做到這一點?Java - 添加兩個不等數組的內容

非常多我想特定的索引位置添加對方,但我不知道如何做到這一點與不平等的數組。

編輯:它增加了位置,任何不匹配的東西在最大的數組中保持不變。 [0, 0, -2/3, 1, 0, 0]的位置0, 1, 2, 3, 4, 5和數組[2/3, 0, -1, 0, 7/2]的位置與較大的數組重合,因此我需要將相同的位置值添加並放入結果數組中。我創建了一個新的結果數組,並將其設置爲等於最大數組,因此所有必須完成的操作都是添加相似的位置值。

+2

當兩個陣列的長度不同時,你想要發生什麼?長數組末尾的不匹配數字是否應該放在新數組的末尾?新陣列的末尾是否應該有零?在我們可以幫助您實施之前,您需要考慮這一部分。 –

+0

執行一個循環,其索引在較短陣列的範圍內運行並添加數字。然後做另一個運行在另一個陣列左邊的循環。 – Eran

回答

2

這裏是我設計了一個精心設計的,易於理解的方式:

它是什麼它增加了陣列的最後一個元素結合在一起,並從那裏向後移動;如果一個陣列之前的另一端,則簡單地以零不存在的元素的值,然後將其添加:

public class ArrayAddition 
{ 
public static void main(String[] args) 
{ 
    double array1[] = {2./3, 0, -1, 0, 7./2}; // first array 
    double array2[] = {0, 0, -2./3, 1, 0, 0}; // second array 
    int length = Math.max(array1.length, array2.length); // length of longest array 
    double newArray[] = new double[length]; // result must be length of longest array 

    int index1 = array1.length - 1; // last element of first array 
    int index2 = array2.length - 1; // last element of second array 
    int indexRes = length - 1;  // result will be placed in last spot of result 

    for (int i = length -1; i >= 0; i--) // adds elements of two arrays together bckwrd 
    { 

     double val1, val2;  // value holders for array elements 

     try // try to get value of the array 1 at certain position 
     { 
      val1 = array1[index1]; 
     } 
     catch(ArrayIndexOutOfBoundsException e) // if empty, make it zero 
     { 
      val1 = 0; 
     } 

     try // try to get value of array 2 at certain position 
     { 
      val2 = array2[index2]; 
     } 
     catch(ArrayIndexOutOfBoundsException e) // if empty make it zero 
     { 
      val2 = 0; 
     } 

     newArray[indexRes] = val1 + val2; // array[?] result is val1 + val 2 
     index1--; // decrement to the next lower value 
     index2 --; // decrement to the next lower value 
     indexRes--; // go the next lower spot 


    } 

    for (int i = 0; i < newArray.length; i ++) // this loop prints out the results 
     System.out.println(newArray[i]); 

} 

} 

你需要輸入你的價值觀作爲雙打或答案將是不正確的(2。/3,而不是2/3)

0.0 
0.6666666666666666 
-0.6666666666666666 
0.0 
0.0 
3.5 

答案將是小數形式,出於顯而易見的原因(如果答案是2/3,它實際上由3分2,仍然是正確的答案,你可以將其轉換回)

希望這有助於! :)

+0

很好的解釋... – NGoyal

0

從最後開始查看數組,並添加2個值,將它們放入具有最大數組大小的新數組中。

int a = arrayA.length-1; 
int b = arrayB.length-1; 

double [] result = new double[Math.max(arrayA.length, arrayB.length)]; 
double sum = 0; 
while(a >= 0 || b >= 0) { 
    if(a>=0) sum+=arrayA[a]; 
    if(b>=0) sum+=arrayB[b]; 

    result[Math.max(a, b)] = sum; 
    sum = 0; 
    a--; 
    b--; 
} 
0

這應該這樣做。請注意,此代碼缺少數組變量的聲明。

if (array1.length > array2.length) 
    array3 = addArrays(array1, array2); 
else 
    array3 = addArrays(array2, array1); 


int [] addArrays(longArray, shortArray) { 
    int index; 
    for (index = 0; index < longArray.length - shortArray.length; index++) { 
    array3[index] = longArray[index] + 0; 
    } 
    for (int i = 0; i < shortArray.length; i++, index++) { 
    array3[index] = longArray[index] + shortArray[i]; 
    } 
    return array3; 
} 
0
import java.util.Scanner; 

public class ArrayAdd { 
    public static void main(String args[]) { 
     Scanner a = new Scanner(System.in); 
     int m = a.nextInt();// First array's size 
     int n = a.nextInt();// Second array's size 
     int arr1[] = new int[m]; 
     int arr2[] = new int[n]; 
     for (int i = 0; i < m; i++) { 
      arr1[i] = a.nextInt(); 
     } 
     for (int i = 0; i < n; i++) { 
      arr2[i] = a.nextInt(); 
     } 
     a.close(); 
     if (m < n) { 
      int difference = n - m; 
      int arr3[] = new int[n]; 
      for (int i = 0; i < n; i++) { 
       if (i < difference) { 
        arr3[i] = arr2[i]; 
       } else { 
        arr3[i] = arr1[i-difference] + arr2[i]; 
       } 
       System.out.println(arr3[i]); 
      } 
     } else { 
      int difference = m - n; 
      int arr3[] = new int[m]; 
      for (int i = 0; i < m; i++) { 
       if (i < difference) { 
        arr3[i] = arr1[i]; 
       } else { 
        arr3[i] = arr1[i] + arr2[i-difference]; 
       } 
       System.out.println(arr3[i]); 
      } 
     } 

    } 
}