查找数组中的唯一元素 - 编译器错误

时间:2016-07-05 02:20:42

标签: java

我正在编写一个方法来检查一个数组并返回一个只有唯一整数的数组,但是我在return语句中遇到了编译器错误,“找不到符号”。我怎么能绕过这个?

错误:

Solution.java:35:错误:找不到符号

symbol:variable finalUniqueArray

location:class Solution

  static int[] findUniqueElements(int[] a) {
    int[] uniqueArray = new int[a.length];
    int count = 0;
    for (int i = 0; i < a.length; i++){
        boolean exists = false;
        int value = a[i];
        for ( int k = 0; k <= count; k++){
            if (value == uniqueArray[k]){
                exists = true;
                break;
            }
        if (!exists){
            uniqueArray[count] = value;
            count++;
        }
        exists = false;
        }            
       int[] finalUniqueArray = new int[count];
        for (int k = 0; k < count; k++)
            finalUniqueArray[k] = uniqueArray[k];

        }
    return finalUniqueArray;
}

2 个答案:

答案 0 :(得分:2)

你在for-Block中声明了finalUniqueArray,这意味着它是一个局部变量并在执行循环后被销毁,因此你无法在你的return语句中访问它,这在for语句之外-loop

答案 1 :(得分:2)

您使用了在for循环中声明的局部变量finalUniqueArray

// outer for loop's context
    int[] finalUniqueArray = new int[count];
    for (int k = 0; k < count; k++)    finalUniqueArray[k] = uniqueArray[k];

}
return finalUniqueArray;

如果你要在for循环之外访问它,请在main for循环之外声明它。

int[] finalUniqueArray=null;
for (int i = 0; i < a.length; i++){
    boolean exists = false;
    int value = a[i];

然后在你打算使用它时初始化它,

finalUniqueArray = new int[count];
for (int k = 0; k < count; k++){
    finalUniqueArray[k] = uniqueArray[k];
}

完整代码:

static int[] findUniqueElements(int[] a) {
    int[] uniqueArray = new int[a.length];
    int count = 0;
    int[] finalUniqueArray=null;
    for (int i = 0; i < a.length; i++){
        boolean exists = false;
        int value = a[i];
        for ( int k = 0; k <= count; k++){
            if (value == uniqueArray[k]){
                exists = true;
                break;
            }
            if (!exists){
                uniqueArray[count] = value;
                count++;
            }
            exists = false;
        }            
        finalUniqueArray = new int[count];
        for (int k = 0; k < count; k++){
            finalUniqueArray[k] = uniqueArray[k];
        }
    }
    return finalUniqueArray;
}