2017-09-04 1 views
-1

Wenn ich den Code zu kompilieren, bekomme ich einen Fehler:Warum kann die Return-Anweisung mein int nicht finden?

"cannot find symbol - variable wayA"

Kann jemand bitte den Grund erklären?

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' ist innerhalb eines' if' Blocks definiert und ist außerhalb davon nicht sichtbar. – Phylogenesis

+0

@GalYakir akzeptieren Sie bitte eine Antwort, wir verbringen Zeit, Sie richtig zu beantworten, Sie können 10sec nehmen, um zu akzeptieren;) – azro

Antwort

6

Die Variable wayA im scope des if Block definiert ist, so dass es nicht existiert nur zwischen den Klammern der if, so dass Sie keinen Zugriff darauf später haben

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

Sie müssen es definieren vor:

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

Der Compiler kann WegA nicht finden, weil Sie ihn im if-Block deklariert haben. Verschieben Sie die Deklaration Ihres int wayA aus diesem Block. So:

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