2016-10-15 10 views
1

私は2つのアレイ持って追加します。私は、これら2つの配列を追加したいが異なる長さの配列

int [] array1 = {2, 4, 5}; 
int [] array2 = {1, 4, 6, 5, 2, 1}; 

を、私はこの結果をしたい:

int [] result = {3, 8, 11, 5, 2, 1}; 

しかし、配列結果の長さは何ですか? 、array1.lengthまたはarray2.length?

しかし、私は私が最初の配列をampliedことができれば、男を持っている:

int [] array1 = {2, 4, 5, 0, 0, 0}; 

私の悪い英語のことで申し訳ありませんが、どうもありがとうございました!

+3

* "配列の長さはどのくらいですか?" * Um ... ['Math.max(array1.length、array2.length)'](http://docs.oracle.com/javase /8/docs/api/java/lang/Math.html#max-int-int-)? 'array1.length

+0

はい、しかし、後で私が追加することができます、エラー:ArrayOutBoundsOfException存在するので、私はこれを解決したいほんの少しです。 –

+0

はい。短い配列の終わりを越えてアクセスしようとしないようにガードを使用します。 –

答えて

1
public int[] addArrays(int[] a1, int[] a2) { 
    int[] result; 
    int[] smallPtr; 

    if (a1.length <= a2.length){ 
    result = Arrays.copyOf(a2); 
    smallPtr = a1; 
    } else { 
    result = Arrays.copyOf(a1); 
    smallPtr = a2; 
    } 

    for (int i = 0; i < smallPtr.length; i++) { 
    result[i] += smallPtr[i]; 
    } 

    return result; 
} 

forループは、配列の要素を1つずつ追加するためのかなり標準的なコードです。上記のif/elseの文では、resultsmallPtrと一緒に「魔法」が起こっています。

は、十分説明されています。つまり、結果の配列はクライアントに返されます。 smallPtrは、2つの配列のうちの小さいほうへの「ポインタ」です。 if/elseブロックは、どの配列が最小の配列かを簡単に判断しようとし、大きい配列のコピーを作成しながらsmallPtrと等しくなるように設定します。次に、小さな配列を反復して、それらの要素を大きな配列のコピーに追加して、私たちに答えを与えます。

この問題には複数の方法があります。 1つの方法は、ifの文をloopの中に入れて、IndexOutOfBoundsExceptionを防ぐために配列の境界条件をチェックするだけです。しかし、この解決策では、コードが簡潔になるようにしようとしています(そして、うまくいけば読みやすく、理解しやすくなります)。if/elseブロックだけです。

0

I have two arrays:

int [] array1 = {2, 4, 5}; int [] array2 = {1, 4, 6, 5, 2, 1};

I want add these two arrays, I want this result:

int [] result = {3, 8, 11, 5, 2, 1};

ここでの主な課題は、次のとおり

  • 最初のチャレンジが容易ように解決する方法非対称配列を

を処理するために、結果のアレイ

  • のサイズを決定する方法2つのアレイ長の最大値。第2の課題を解決するには、一方の配列の要素にもう一方の要素がない場合の処理​​が必要です。 三項演算子の使用がブロックのif-then文との場合よりも、このコードをより読みレンダリング方法

    public int[] addArrays(int[] array1, int[] array2) { 
        int maxLength = (array1.length > array2.length) ? array1.length : array2.length; 
        int index = 0; 
        int[] sums = new int[maxLength]; 
    
    
        while (index < maxLength) { 
         sums[index] = (index < array1.length) ? array1[index] : 0; 
         sums[index] += (index < array2.length) ? array2[index] : 0; 
         index++; 
        } 
        return sums; 
    } 
    

    注:ここでのソリューションです。

  • 関連する問題