2014-09-12 158 views
-2

我仍然與局部變量的範圍相混淆 此代碼不起作用,因爲我在「i & n」未解析。我已經確定它作爲循環int i = 0。這不夠嗎? (這是加上字符串的第n個字符)。局部變量的範圍

public String everyNth(String str, int n) { 
    String result = ""; 

    for (int i = 0; i <= str.length(); i++); { 
     if (i%n == 0) { 
      result = result + str.charAt(i); 
     } 
     else { 
      result = result; 
     } 
    } 
    return result;   
} 
+3

那是什麼'else'語句的意義呢? – Gary 2014-09-12 19:38:00

+12

在大括號之前,你在'for'「標題」末尾有一個分號。擺脫它。 – 2014-09-12 19:40:30

+0

他們回答你的問題嗎? – Rika 2014-09-12 20:06:23

回答

1

要在喬恩斯基特的回答值得評論擴大,分號在for (int i = 0; i <= str.length(); i++);末結束的語句,而我是在範圍上不再分號之後。

+0

「;」是我的代碼中的重大錯誤。我明白了,這是一個很好的幫助! – 2014-09-12 20:15:40

1

你有幾個誤區:

  1. 可以刪除其他{...}部分,因爲你並不需要它。

  2. 您有額外的';'在for循環語句中。

  3. for循環的索引有錯誤。您需要執行'i小於'str.length(),而不是i < = str.length()。基本上你的for循環將嘗試訪問你的字符數組的全長索引,但實際上它超出了長度。例如,字符串'hello'的索引是0,1,2,3,4。但是「hello」.length()實際上是5.如果您嘗試訪問字符串的第5個索引,您將看到一個'java.lang.StringIndexOutOfBoundsException'異常。

此外,你想要的每一個第N個值,你想要做的(i-1)%n。這又是因爲索引問題。嘗試在你的邏輯中插入參數,並用鉛筆寫下結果,你就會明白爲什麼。

當然,當我== 0,你不想(0-1)%n發生。因此,通過添加'i!= 0'來跳過i == 0。

現在,以下是工作代碼:

public static String everyNth(String str, int n) { 
    String result = ""; 
    for (int i = 0; i < str.length(); i++) { 
     if ((i-1)%n == 0 && i!=0) 
      result = result + str.charAt(i); 
    } 
    return result;   
} 
+0

這是一個很好的幫助!謝謝!!! – 2014-09-12 20:16:11