0

配列 1[2/3, 0, -1, 0, 7/2]と配列 2 としましょ[0, 0, -2/3, 1, 0, 0]う。結果の配列を[0, 2/3, -2/3, 0, 0, 7/2]. 結果の配列の長さは、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

4 に答える 4

2

これが私が考案した精巧で理解しやすい方法です:

配列の最後の要素を一緒に追加し、そこから後方に移動します。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]);

}

}

値を double として入力する必要があります。そうしないと、答えが正しくなくなります (2/3 ではなく 2./3)。

0.0
0.6666666666666666
-0.6666666666666666
0.0 
0.0
3.5

明らかな理由から、答えは 10 進数形式になります (答えが 2 / 3 の場合、実際には 2 を 3 で割りますが、それでも正しい答えです。元に戻すことができます)。

うまくいけば、これが役に立ちます!:)

于 2013-10-14T01:51:50.293 に答える
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]);
            }
        }

    }
}
于 2013-10-14T01:36:56.027 に答える
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;
}
于 2013-10-14T01:24:04.667 に答える