2013-10-14 1 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] имеет местоположения, которые совпадают с большим массивом как 1, 2, 3, 4, 5, поэтому я хочу, чтобы те же значения местоположения были добавлены и помещены в результирующий массив. Я создал новый результирующий массив и установил его равным самому большому массиву, поэтому все, что нужно сделать, это добавление похожих значений местоположения.

+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, он фактически делит 2 на 3, по-прежнему правильный ответ, вы можете преобразовать его обратно)

Надеюсь, это поможет! :)

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

    } 
}