2016-07-05 10 views
0

Ich schreibe eine Methode, die ein Array untersucht und ein Array mit nur den eindeutigen Ganzzahlen zurückgibt, aber ich bekomme einen Compilerfehler, "kann Symbol nicht finden" in der Return-Anweisung . Wie kann ich das umgehen?Finden von eindeutigen Elementen in einem Array - Compilerfehler

Der Fehler:

Solution.java:35: Fehler: Variable finalUniqueArray

Lage: nicht Symbol

Symbol finden Klasse Lösung

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

beheben Ihre Einrücken und Sie können Ihre Fehler finden. –

+0

wie @Hontaro sagte die Variable ist innerhalb der Schleife definiert, so dass es nicht außerhalb des Bereichs der Schleife zugänglich ist –

+0

Warum verwenden Sie nicht https://docs.oracle.com/javase/7/docs/api/java/ util/Arrays.html # copyOf (int [],% 20int) 'zurück Arrays.copyOf (uniqueArray, count);' –

Antwort

2

Sie in deklariert finalUniqueArray Ihre for-Block, was bedeutet, dass es sich um eine lokale Variable handelt, die nach der Ausführung der Schleife zerstört wird. Daher können Sie in Ihrer Rückgabe nicht darauf zugreifen Anweisung, die außerhalb der For-Schleife liegt

2

Sie haben eine lokale Variable finalUniqueArray verwendet, die in einer for-Schleife deklariert wurde.

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

} 
return finalUniqueArray; 

Wenn Sie außerhalb der for-Schleife darauf zugreifen möchten, deklarieren Sie es außerhalb der for-Schleife.

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

Dann ist es initialisieren, wenn Sie es verwenden wollen,

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

komplette Code:

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