2015-06-26 44 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

「在條件之前聲明」,而不是「在條件之前初始化它們」。這不是一個初始化問題;編譯器不會識別它們已被聲明。 –