0

私がやろうとしているのは、別の配列から偶数を取得する配列を作成することです。正しい方法で行ったかどうかはわかりません。関数/メソッドのようにステートメントから戻る方法を探しましたが、それが可能かどうかさえわかりません。

とにかく、私がここで抱えている問題は、「シンボルが見つかりません」の下の「return evenArray」です。これが何を意味するのかわかりませんか?

public static int[] getEvenArray(int[] array)
{        
    int dividedBy = 2;
    int evenElement;
    int evenCount = 0;

    for(int i = 0; i < array.length; i++)
    {
        int[] evenArray;
        evenElement = array[i] % dividedBy;

        if(evenElement == 0)
        {
            evenCount++;
        }
        else
        {
            array[i] = 0;
        }

        evenArray = new int[evenCount];

        for(int x = 0; x < evenArray.length; x++)
        {
            if(array[i] != 0)
            {
                evenArray[x] = array[i];
            }
        }
    }

    return evenArray;
}

これは私の講義の 1 つからのチュートリアルです。控えめに言っても少し難しいです :-)0

4

2 に答える 2

3

evenArrayループのスコープ内で定義されます。for(実際にはそれよりも少し悪いです。反復ごとに再宣言しているため、以前の内容は破棄されます)

したがって、forループの外に出ると、それを参照することはできません。

最も簡単な解決策はstd::vector<int>、この型に a を使用し、関数の開始時に宣言することです。関数の戻り値の型も同じに変更します。ベクトルのサイズを適切に設定することを忘れないでください。

(先に進むと、賢い講師がstd::vector、そのベクトルのディープ コピーを取得する可能性のある を返すことについて質問します。C++11 より前では、戻り値の最適化について言及していましたが、今ではr-value 参照について話すことができます。ディープ コピーはありません。移動コンストラクターが使用されるため、取得されます)。

于 2014-11-19T12:29:03.600 に答える
0

ブロック内で宣言された変数は、ブロックの外では見えません。この int[] evenArray を移動します。機能の最初に。

于 2014-11-19T12:31:28.507 に答える