2014-10-04 31 views
1
public class StringTest{ 
    public static void main(String[] args){ 
     String a = "Aphex"; 
     int len = a.length(); 
     int lenA = len/2-1; 
     int lenB = len/2+2; 
     if(len%2==0){ 
      System.out.println("Number of letters has to be odd"); 
     }else{ 
      System.out.println(a.substring(lenA, lenB)) }}} 

Output: 
phe 

這個簡單的代碼可以接受任意帶有奇數個字母的字符串並找到三個中心字符串。我的問題是 - 爲什麼它中心從中間(len/2-1)下降一個點,然後兩個景點了它不圍繞工作的其他方式(len/2-2len/2+1這爲什麼有效? Java四捨五入嗎?

是Java總是捨去?。?

+1

繪製圖表。 – 2014-10-04 18:09:50

+0

我做到了!這增加了更多的困惑。你正在登陸一個字母/數字的中間。我對Java非常陌生,所以我只是想知道Java是否總是以同樣的方式向未來參考。 – Aphex 2014-10-04 18:11:59

回答

5

您正在開展整數上下文分裂。當分割兩個int,只有結果的整數部分將被保留,而其餘將被丟棄。例如,29/10將導致2

2

我的問題我s - 爲什麼它的中心是從中間向下一個點(len/2-1),然後是兩個點?它不會以其他方式工作(len/2-2len/2+1)。

這是因爲通過substring()採取的範圍包括開始索引,但確實包括結束索引。引述documentation

子字符串開始在指定的beginIndex並延伸到字符索引endIndex - 1

因此實際範圍是[len/2-1; len/2+1]並且圍繞中心字符len/2對稱。

(是的,當您將奇數除以2時,結果向零取整。)

+0

如果我可以的話,我會讚揚你 - 謝謝你的清理! – Aphex 2014-10-04 20:33:42