0

プログラムタスクは次のとおりです。

整数の配列をパラメーターとして受け取り、整数の各ペアをそのペアの合計で置き換えた結果を含む新しい配列を返す、collapseというメソッドを記述します。

たとえば、listという配列に値が格納されている場合
{7, 2, 8, 9, 4, 13, 7, 1, 9, 10}

次に、の呼び出しは、collapse(list)以下を含む新しい配列を返す必要があります {9, 17, 17, 8, 19}

元のリストの最初のペアは9(7 + 2)に折りたたまれ、2番目のペアは17(8 + 9)に折りたたまれます。リストに奇数の要素が格納されている場合、最後の要素は折りたたまれていません。

たとえば、リストがだった場合{1, 2, 3, 4, 5}、呼び出しはを返し{3, 7, 5}ます。メソッドは、パラメーターとして渡される配列を変更しないでください。

これが私の現在書いているプログラムです:

public static int[] collapse(int[] a1) {
    int newArrayLength = a1.length / 2;
    int[] collapsed = new int[newArrayLength];
    int firstTwoSums = 0;
    for (int i = 0; i < a1.length-1; i++) {
        firstTwoSums = a1[i] + a1[i+1];
        collapsed[collapsed.length-1] = firstTwoSums;
    }
    return collapsed;
}

の配列を渡し、 {7, 2, 8, 9, 4, 13, 7, 1, 9, 10}この配列を。に置き換えたいと思い{9, 17, 17, 8, 19}ます。
注:{9, 17, 17, 8, 19}私が書いたforループを介して取得されます。

現在、取得した整数を「折りたたまれた」配列に追加するのに問題があります。あなたが私を助けてくれるか、少なくともこれを行う方法について私にいくつかのガイダンスを与えることができれば、それは大きな助けになるでしょう。

前もって感謝します!

4

5 に答える 5

0

使用する

collapsed[collapsed.length-1] = firstTwoSums;

数値の合計は、collapsed.length -1が定数値であるため、常に折りたたみ配列の同じインデックスに入れられます。

ゼロから始まる新しい変数を作成してみてください。これは、折りたたみに合計を追加するたびにインクリメントできます。例えば、

int j = 0;
for(...) {
...
collapsed[j++] = firstTwoSums;
}
于 2013-02-16T10:53:13.970 に答える
0

まず、何が起こっているのかを理解する必要があります。

sizeサイズがまたはのいずれかになり得るeven特定の配列がありoddます。a1.length/2のサイズを設定するために使用しているため、これは重要ですnew array。サイズを正しく設定するには、奇数と偶数の値もチェックする必要があります。そうしないと、奇数サイズの配列では機能しません。理解を深めるために、いくつかのケースを試してください。

これがその方法です。

public static int[] collapseThis(int[] array) {

    int size = 0;

    if(isEven(array.length))
        size = array.length/2;
    else
        size = array.length/2+1;

    int[] collapsedArray = new int[size];

    for(int i=0, j=0; j<=size-1; i++, j++) {

        if(j==size-1 && !isEven(array.length)) {
            collapsedArray[j] = array[2*i];
        }
        else {
            collapsedArray[j] = array[2*i]+array[2*i+1];
        }
    }
    return collapsedArray;
}

private static boolean isEven(int num) { 
    return (num % 2 == 0); 
}
于 2013-02-16T20:50:46.133 に答える
0

これは便利な答えだと思います。

public static void main(String[] args){
   int[] numbers = {1,2,3,4,5};
   int[] newList = collapse(numbers);
   System.out.println(Arrays.toString(newList));
}

public static int[] collapse(int[] data){
    int[] newList = new int[(data.length + 1)/2];
    int count = 0;
    for (int i = 0; i < (data.length / 2); i++){
       newList[i] = data[count] + data[count + 1];
        System.out.println(newList[i]);
       count = count + 2;
    }
    if (data.length % 2 == 1){   
       newList[(data.length / 2)] = data[data.length - 1];
   }
    return newList;
}
于 2016-06-04T21:50:43.120 に答える
0

以下のように、配列のケースを奇数要素または偶数要素のいずれかと組み合わせます。

public static int[] collapse(int[] a1) {
    int[] res = new int[a1.length/2 + a1.length % 2];
    for (int i = 0; i < a1.length; i++)
         res[i/2] += a1[i];
    return res;

}

于 2020-03-22T21:58:56.910 に答える
-1
public static int[] collapse(int[] a1) {
    int newArrayLength = a1.length / 2;
    int[] collapsed;
    if(a1.length%2 == 0)
    {
        collapsed = new int[newArrayLength];
    }
    else
    {
        collapsed = new int[newArrayLength+1];
        collapsed[newArrayLength] = a1[a1.length-1];
    }
    int firstTwoSums = 0;
    for (int i = 0; i < newArrayLength; i++) {
        firstTwoSums = a1[i*2] + a1[i*2+1];
        collapsed[i] = firstTwoSums;
    }       
    return collapsed;
}

コードを変更しました。最初に試してみてください。

于 2013-02-16T04:05:34.993 に答える