2015-01-20 70 views
0

爲什麼下面的代碼不適用於這裏的問題? http://codingbat.com/prob/p101475初學者字符串操作

public String frontTimes(String str, int n) { 
    if (str.length() < 3) { 
    String front = str; 
    } else { 
    String front = str.substring(0, 3); 
    } 
    String copies = ""; 

    while (n > 0) { 
    copies = copies + front; 
    n = n - 1; 
    } 

    return copies; 


} 

我真的不明白「前不能得到解決」的錯誤我得到

+0

因爲你定義了'if'內'字符串前...'聲明,Java會在它離開該代碼塊時立即銷燬它。所有你需要做的就是把'String front =「」;'放在'if'之前的一行。 – Jon 2015-01-20 18:44:51

回答

3

您的變量的作用域front是隻在if/else塊。您可能需要嘗試在if之前聲明變量front,然後在if之內進行分配。

0

您聲明front作爲您的if塊的局部變量,然後作爲else子句的(另一個)局部變量。您必須在方法塊的範圍內聲明它。

public String frontTimes(String str, int n) { 
    String front; 
    if (str.length() < 3) 
     front = str; 
    else 
     front = str.substring(0,3); 
    // or shorter, with a ternary 
    // String front = str.length() < 3 ? str : str.substring(0, 3); 

    String copies = ""; 
    while (n > 0) { 
    copies = copies + front; 
    n = n - 1; 
    } 
    return copies; 
} 
1

Java中變量的scope僅限於聲明變量的花括號集。

如果您聲明一個變量是這樣的:

if (str.length() < 3) { 
    String front = str; 
} 

然後front只有if塊的花括號內的存在。

當你這樣做:

else { 
    String front = str.substring(0, 3); 
} 

然後另一個變量,也稱爲front,你else塊的花括號內的存在。

但是,如果在if塊之前聲明變量:

String front; 
if (str.length() < 3) { 
    front = str; 
} else { 
    front = str.substring(0, 3); 
} 

那麼它是在範圍爲整個方法(因爲這是大括號的周圍集)。

或者,你可以使用ternary operator簡化您的變量初始化:

String front = (str.length() < 3 ? str : str.substring(0, 3)); 
0

問題是作用域規則。類似String front的字段僅在{ }內部可見。

我建議你先試着在IDE中編譯代碼,因爲這會幫助你解決這些錯誤。

您可能會覺得這個解決方案很有趣。它迭代O(log N)次而不是O(N)次。 (我懷疑這是不是更好,而是以不同的方式瓜分的問題)

public String frontTimes(String str, int n) { 
    if (str.length() > 3) str = str.substring(0, 3); 
    StringBuilder sb = new StringBuilder(); 
    StringBuilder sb2 = new StringBuilder(str); 
    while (n > 0) { 
    if ((n & 1) == 1) 
     sb.append(sb2); 
    n /= 2; 
    sb2.append(sb2); 
    } 
    return sb.toString(); 
} 
0

試試這個:

public String frontTimes(String str, int n) { 

    String front; 

    if (str.length() < 3) { 
    front = str; 
    } 

    else { 
    front = str.substring(0, 3); 
    } 

    String copies = ""; 

    for (int i = 0; i < n; i++) { 
    copies += front; 
    } 

    return copies; 

}