2017-09-04 13 views
-1

私は以下のコードをコンパイルすると、私はエラーを取得:return文が自分のintを見つけることができないのはなぜですか?

"cannot find symbol - variable wayA"

誰かが理由を説明していただけますか?

private static int edit (String str1, String str2,int i, int j) 
    { 
     int len1=str1.length(); 
     int len2 = str2.length(); 
     if(len1==0 || len2==0) 
      return 0; 
     if(str1.charAt(0)==str2.charAt(0)) 
      return edit(str1.substring(1),str2.substring(1),i,j); 
     int wayD =1+ edit 

(str1.substring(1),str2,i,j); 
     if(len2>len1) 
     { 
      int wayA = 1+edit(str1+str2.charAt(0),str2.substring(0),i,j); 
     } 
     return Math.min(wayD,wayA); 
    // when i compile "cannot find symbol - variable wayA" why?? 
    } 
+4

'wayA'は' if'ブロック内で定義され、その外側には表示されません。 – Phylogenesis

+0

@ギャルヤキルは答えを受け入れてください、私たちはあなたに答える時間を費やし、受け入れるのに10秒かかります;) – azro

答えて

6

変数wayAifブロックのscopeで定義されているので、あなたは後でそれに

if(len2>len1){ 
    int wayA = 1 + edit(str1+str2.charAt(0),str2.substring(0),i,j); 
} 
return Math.min(wayD,wayA); 
をアクセスすることができませんので、それは、 ifの括弧の間 のみ存在しません

より前に定義する必要があります。

int wayA = 0; 
if(len2>len1){ 
    wayA = 1 + edit(str1+str2.charAt(0),str2.substring(0),i,j); 
} 
return Math.min(wayD,wayA); 
1

ifブロックで宣言したため、コンパイラはwayAを見つけることができません。ブロックの場合はint wayAの宣言を移動します。このように:

private static int edit (String str1, String str2,int i, int j) 
{ 
    int len1=str1.length(); 
    int len2 = str2.length(); 
    if(len1==0 || len2==0) 
     return 0; 
    if(str1.charAt(0)==str2.charAt(0)) 
     return edit(str1.substring(1),str2.substring(1),i,j); 
    int wayD = 1 + edit(str1.substring(1),str2,i,j); 
    int wayA = 0; 
    if(len2>len1) 
    { 
     wayA = 1+edit(str1+str2.charAt(0),str2.substring(0),i,j); 
    } 
    return Math.min(wayD,wayA); 
関連する問題