2015-10-28 52 views
1

這是我的代碼java的循環COPY的對象?

public static String change(String word, char gone, char here) { 
    char[] chars = word.toCharArray(); 
    for (char c : chars) { 
     if (c == gone) { 
      c = here; 
     } 
    } 
    return new String(chars); 
} 

,這我怎麼稱呼它:

System.out.println(change("supper", 'p', 'o')); 

結果是晚飯我試圖找到解釋是怎麼回事...

chars變量是一個變量,它指向一個數組對象,它包含字符串對象word的字符。那麼我認爲唯一的解釋是在for聲明中,java實際上覆制了chars數組。那是否正確?

一些用戶說,在我的代碼的警告,

但在這裏,你走了,沒有警告

enter image description here

+0

你使用哪種編輯器,你需要讓它爲你設置格式。 – weston

+0

@weston對不起,現在我沒有編輯器,與終端工作:( –

+0

我不明白 – weston

回答

3
c = here; 

更新字符的值,而不是數組。如果您使用編輯器,則會告訴您未使用分配的值。上述

IntelliJ

編輯喜歡的IntelliJ是免費的,所以您有任何藉口。

+0

實際上我只是在eclipse中做了代碼,現在我得到了'賦值未使用'的消息,代碼並沒有發生錯誤或者警告信息 –

+0

是的,這是來自IDE的提示,而不是編譯器,說操作不會有任何效果,它不是編譯器警告或錯誤河 – weston

+0

好吧,你的意思是說,「我得到**沒有**消息」?那麼Eclipse不是最好的IMO,我更喜歡ItelliJ。 – weston

1

c變量只是複製引用數組元素。

原因是增強型for循環使用Iterator,爲了獲得下一個元素,它調用Iterator.next()方法,該方法將原始集合元素的副本給出。

爲了使其工作,你必須直接設置新的值到數組:

public static String change(String word, char gone, char here) { 
    char[] chars = word.toCharArray(); 
    for (int i = 0; i < chars.length; i++) { 
     if (chars[i] == gone) { 
      chars[i] = here; 
     } 
    } 
    return new String(chars); 
} 
0

做過什麼,現在只是改變局部變量c不是字符數組中的元素

1

在for循環中,u已經檢查是否已經去了字符的每個字符並改變了值,但是那個改變了的變量並沒有用來再次改變「chars」。你每次都改變變量c的值,但從來沒有用過,所以你得到了「Supper」。所以如果u想改變「晚餐」,然後使用下面的代碼

public static String change(String word, char gone, char here) { 
char[] chars = word.toCharArray(); 
for (int i = 0; i < chars.length; i++) { 
    if (chars[i] == gone) { 
     chars[i] = here; 
    } 
} 
return new String(chars); 
} 
0

它不工作,因爲

for (char c : chars) 

這裏要創建一個新的變量c包含你的性格的COPY目前正在迭代。

你可以做的,而不是使用C風格的for循環,遍歷每個數組元素和陣列內更換元素是什麼,是這樣的:

for (int i = 0; i < chars.length; i++) { 
    if (char[i] == gone) { 
     char[i] == here; 
    }   
} 

甚至更​​好:跳過循環和使用字符串replace方法。