代码之家  ›  专栏  ›  技术社区  ›  user1757703

Java-添加两个不等数组的内容

  •  0
  • user1757703  · 技术社区  · 12 年前

    比方说数组一 [2/3, 0, -1, 0, 7/2] 和数组二 [0, 0, -2/3, 1, 0, 0] 所以我希望我的结果数组是 [0, 2/3, -2/3, 0, 0, 7/2] 结果数组长度将是两个数组之间的最大长度。我如何在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 所以我希望将相同的位置值添加到结果数组中。我创建了一个新的结果数组,并将其设置为最大的数组,这样所要做的就是添加类似的位置值。

    4 回复  |  直到 12 年前
        1
  •  2
  •   Jose    12 年前

    以下是我精心设计的一种易于理解的方式:

    它所做的是将数组的最后元素添加在一起,然后从那里向后移动;如果一个数组在另一个数组之前结束,它只需将不存在的元素的值替换为零,然后将它们相加:

    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,仍然是正确的答案,你可以将其转换回来)

    希望这能有所帮助!:)

        2
  •  0
  •   ug_    12 年前

    从最后开始遍历数组,将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--;
    }
    
        3
  •  0
  •   Jay Nebhwani    12 年前

    应该这样做了。请注意,此代码缺少数组变量的声明。

    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;
    }
    
        4
  •  0
  •   Naddy Painless    12 年前
    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]);
                }
            }
    
        }
    }