2013-04-16 98 views
3

我正在解決CodingBat.com(extraFront)上的基本Java字符串問題。在if/else結構中聲明變量

任務是給定一個任意長度的字符串,返回重複三次的兩個第一個字符。第一個例子是我落得這樣做直觀:

public String extraFront(String str) { 

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

這給了我一個錯誤,前解決不了。我猜我需要定義外循環的變量,所以我改變了代碼以下,這沒有錯誤的工作原理:

public String extraFront(String str) { 

    String front; 

    if (str.length() <= 2){ 
    front = str; 
    }else{ 
    front = str.substring(0,2); 
    } 
    return front+front+front; 
} 

令我百思不解的是爲什麼這應該有所作爲,作爲變量是怎麼回事無論如何宣佈,它會不會?這是CodingBat如何處理代碼的特點,還是這實際上是一個錯誤?如果是這樣,爲什麼這是不正確的代碼?如果它不是不正確的,它是不好的風格?

回答

4

讓我感到困惑的是,爲什麼這應該有所作爲,因爲變量將要宣佈,不是嗎?

這是一個範圍界定問題。變量只在聲明的塊內可見。這與CodingBat無關 - 它是Java語言的一部分。從section 6.3 of the JLS

聲明的範圍內,其由該聲明聲明的實體可以被稱爲使用簡單的名稱的程序的區域,只要它是可見的(§6.4.1)。
...
塊(14.4)中局部變量聲明的範圍是聲明出現的塊的其餘部分,從其自己的初始化程序開始,並在本地變量的右側包含任何其他聲明程序聲明聲明。

我也希望各位能夠了解conditional operator,可在這些情況下幫助:

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

在聲明block內部的局部變量,該variable只會是內部的可見塊,按的Java language

scoping規則,你可以看到在這個簡單的video :)

一個變量只能從它的聲明到聲明它的大括號的末尾纔可用。變量有效的程序文本區域稱爲其範圍。

Blocks and statements