2016-07-05 29 views
0

我正在写一个方法来检查一个数组并返回一个只有唯一整数的数组,但是我在返回语句中出现编译器错误,“找不到符号” 。我怎样才能解决这个问题?查找数组中的独特元素 - 编译器错误

错误:

Solution.java:35:错误:无法找到符号

符号:变量finalUniqueArray

位置:一流的解决方案

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

解决您的缩进,你会发现你的错误。 –

+0

as @Hontaro表示变量在循环中定义,因此无法在循环范围外访问 –

+0

为什么不使用https://docs.oracle.com/javase/7/docs/api/java/ util/Arrays.html#copyOf(int [],%20int)'return Arrays.copyOf(uniqueArray,count);' –

回答

2

您在声明finalUniqueArray您for-Block,这意味着它是一个局部变量,并在循环执行后销毁,因此在返回时无法访问它语句,它位于for循环之外

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