【问题标题】:Java - Adding contents of two unequal arraysJava - 添加两个不相等数组的内容
【发布时间】:2013-10-14 01:02:50
【问题描述】:

假设数组一[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 的较大数组一致,因此我希望将相同的位置值添加并放置到结果数组中。我创建了一个新的结果数组并将其设置为等于最大的数组,因此所要做的就是添加相似的位置值。

【问题讨论】:

  • 当两个数组的长度不同时,您究竟希望发生什么?较长数组末尾的不匹配数字是否应该放在新数组的末尾?新数组的末尾应该只有零吗?在我们帮助您实施之前,您需要仔细考虑这部分。
  • 使用在较短数组范围内运行的索引执行一个循环并添加数字。然后在另一个数组的左侧执行另一个循环。

标签: java arrays addition


【解决方案1】:

这是我设计的一种详尽且易于理解的方式:

它的作用是将数组的最后一个元素加在一起并从那里向后移动;如果一个数组先于另一个结束,它只是将不存在的元素的值替换为零,然后将它们相加:

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】:

    从末尾开始遍历您的数组,然后添加 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】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-01
          • 2015-02-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-01
          • 1970-01-01
          相关资源
          最近更新 更多