【问题标题】:Finding unique elements in an array - compiler error在数组中查找唯一元素 - 编译器错误
【发布时间】:2016-07-05 02:20:42
【问题描述】:

我正在编写一个方法,该方法将检查一个数组并返回一个仅包含唯一整数的数组,但是在返回语句中出现编译器错误“找不到符号”。我该如何解决这个问题?

错误:

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

【问题讨论】:

  • 修正你的缩进,你可能会发现你的错误。
  • 正如@Hontaro 所说,变量是在循环内定义的,因此在循环范围之外无法访问
  • 你为什么不用docs.oracle.com/javase/7/docs/api/java/util/…return Arrays.copyOf (uniqueArray, count);

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案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 循环之外访问它,请在主 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2020-02-02
      • 2021-03-15
      • 2011-02-17
      相关资源
      最近更新 更多