2015-06-26 41 views
1

当我编译下面的代码,它说:“找不到符号:变速”尽管声明变量

"error: cannot find symbol: variable max"

但我没有定义变量max ....

public class Solution { 
    public static boolean isOneEditDistance(String s, String t) { 
      if (s.length() >= t.length()) { 
        StringBuilder a = new StringBuilder (s); 
        StringBuilder b = new StringBuilder (t); 
        int max = s.length(); 
        int min = t.length(); 
      } 
      else { 
        StringBuilder a = new StringBuilder (t); 
        StringBuilder b = new StringBuilder (s); 
        int max = t.length(); 
        int min = s.length(); 
      } 

      int flag = 0; 

      if ((max-min)>1) 
        return flase; 
      else if ((max-min)==1) { 
       ..... 
+0

一般问题的特定情况http://stackoverflow.com/questions/25706216/what-does-a-cannot-find-symbol-compilation-error-mean – Raedwald

+0

是的,特别是关于“也许变量声明超出范围“。 –

+0

如果你使用Math.abs() –

回答

1

我宁愿如下所示的代码,这也避免了因和问题B是作用域包含在if语句块。

if(s.length() < t.length()){ 
    String h = s; s = t; t = h; 
} 
// now s is not shorter than t 
int max = s.length(); 
int min = t.length(); 
StringBuilder a = new StringBuilder(s); 
StringBuilder b = new StringBuilder(t); 
1

你变量/参数的范围不正确:

If a parameter is within { } the scope is limited to within these { }

因此,将您的代码更改为此以更改范围并解决问题:

public class Solution { 
public static boolean isOneEditDistance(String s, String t) { 
int max=0; 
int min=0; 
     if (s.length() >= t.length()) { 
       StringBuilder a = new StringBuilder (s); 
       StringBuilder b = new StringBuilder (t); 
       max = s.length(); 
       min = t.length(); 
     } 
     else { 
       StringBuilder a = new StringBuilder (t); 
       StringBuilder b = new StringBuilder (s); 
       max = t.length(); 
       min = s.length(); 
     } 

     int flag = 0; 

     if ((max-min)>1) 
       return flase; 
     else if ((max-min)==1) { 
1

变量不能被看到的原因是由于变量的范围。变量能够“钻取”可见性链,但不能“挖掘”。由于该变量是在if-statemnent中声明的,因此您的变量仅在之间可见,因为它不能“挖出”。

这里是我真棒MS画图技能较差描绘我的意思大约未能范围能见度“挖出”:

enter image description here

+0

你可以避免整个kerfuffle看着这张图片让我说你的名字是精心挑选的;-)对不起,忍不住:) – Marged

+0

哈哈。打的好。 –

+0

@ ErickG.Hagstrom哎呀。惊讶没有人注意到8个月前。谢谢! :) –

0

变量已经在if (s.length() >= t.length())块被初始化。因此这些变量仅限于它。

解决方案:在条件之前初始化它们。

+0

“在条件之前声明”,而不是“在条件之前初始化它们”。这不是一个初始化问题;编译器不会识别它们已被声明。 –