2016-12-20 1 views
-3

Не могли бы вы помочь мне выяснить, почему я получаю ошибку в этой программе Java?Ошибка java-массивов: /tmp/java_959p0x/TestPrimeDividers.java:30: ошибка: не удается найти символ return arr;

public class TestPrimeDividers { 
    public static boolean isPrime(long n) { 
     boolean flag = true; 
     for (int i = 2; i < n && flag ; i++) { 
      if ((n % i) == 0) 
       flag = false; 
     } 
     return flag; 
    } 
    public static long [] primeDividers(long n) { 
     if (isPrime(n)) { 
      long arr[] = new long [0]; 
      return arr; 
     } else { 
      int j = 0; 
      for (int i = 2 ; i < n; i++) 
       if (isPrime(i)) 
        j++; 
      long arr[] = new long [j]; 
      j = 0; 
      for (int i = 2; i < n; i++) 
       if (isPrime(i)) { 
        arr[j] = i; 
        j++; 
       } 

     } 
     return arr; 
    } 
    public static void main(String[] args) { 
     long arr [] = primeDividers(6); 
    } 
} 

Ошибки я получаю:

/tmp/java_959p0x/TestPrimeDividers.java:30: error: cannot find symbol 
return arr; 
    ^
    symbol: variable arr 
    location: class TestPrimeDividers 
1 error 
+1

Возможный дубликат [Что означает ошибка компиляции «Невозможно найти символ»?] (Http://stackoverflow.com/questions/25706216/what-does-a-cannot-find-symbol-compilation-error-mean) –

ответ

2

В Java, переменные области видимости блоков, в которых они заявлены. Ваш метод primeDividers объявляет две разные переменные: arr, как внутри разных вложенных блоков; ни один из них не доступен на верхнем уровне. Поэтому, когда вы пытаетесь вернуть arr с верхнего уровня метода, вы получите сообщение об ошибке.

Попробуйте объявить переменную в верхней части вашей функции, прежде чем вводить любые вложенные блоки.

+0

Thx это сработало !!! – user2932231

Смежные вопросы