为什么变量不能从for语句中识别?

时间:2014-11-19 12:26:49

标签: java return cannot-find-symbol

我要做的是创建一个从另一个数组中提取偶数的数组。我不确定我是否以正确的方式解决了这个问题。我一直在寻找从函数/方法中返回语句的方法,我找不到任何东西,甚至不确定它是否可行。

无论如何,我在这里遇到的问题是'返回偶数阵列'下方'无法找到符号'。我不确定这意味着什么?

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;
}

这是我的一个讲座的教程,至少可以说有点挑战:-) 0

2 个答案:

答案 0 :(得分:3)

evenArrayfor循环的范围中定义。 (实际上比这更糟糕;你在每次迭代时都重新声明,所以丢弃以前的内容。)

因此,一旦您在for循环之外,就无法引用它。

最快的解决方法是对此类型使用std::vector<int>,并在函数的开头声明它。同时将函数的返回类型更改为相同。不要忘记适当调整矢量大小。

(继续,一位聪明的讲师会问你关于返回一个std::vector,它可能会对该向量进行深层复制。预先C ++ 11你提到返回值优化,现在您可以讨论 r值引用。由于将使用移动构造函数,因此不会进行深层复制。

答案 1 :(得分:0)

块内声明的变量在其外部不可见;移动这个int [] evenArray;开始功能。