2016-12-20 3 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は、異なるネストされたブロック内の2つの異なる変数arrを宣言します。どちらもトップレベルではアクセスできません。したがって、メソッドのトップレベルからarrを返そうとすると、エラーが発生します。

ネストしたブロックを入力する前に、関数の先頭に変数を宣言してみてください。

+0

Thxそれは働いた! – user2932231

関連する問題