2010-08-10 69 views
2

我想將數組中的某些元素複製到另一個元素中。例如,我想將行的索引0複製到鏈接的索引0中,將行的索引3複製到鏈接的索引1中,等等(基本上每3行元素基本上)。初學者的問題:複製數組中的某些元素

我到目前爲止一直讓我發生ArrayIndexOutOfBound錯誤。感謝您的幫助!

String[] lines = inputString.split(System.getProperty("line.separator")); 
String[] links = new String[lines.length]; 
int j = 0; 

for (int i = 0; i < lines.length; i++) { 
    links[i] = lines[j+3]; 
    j++; 
    System.out.println(links[i]); 
} 
+1

Aiyiyi。 _有效的Java第二版,第25項:優先考慮列表array_。 – polygenelubricants 2010-08-10 19:27:34

回答

4

這聽起來像你需要被3遞增i,而不是增加3〜j(但隨後被僅有1遞增j)。事實上,你根本不需要兩個變量:

String[] links = new String[lines.length/3]; 

貪圖:

for (int i = 0; i < lines.length; i += 3) { 
    links[i/3] = lines[i]; 
} 

你也應該改變你的代碼僅創建數組,你需要像大興趣愛好,讓我們來看看你的代碼是實際上試圖做的,在分配方面:

links[0] = lines[3]; 
links[1] = lines[4]; 
links[2] = lines[5]; 
// etc 

正如你所看到的,這只是抵消指數,而不是乘以......並儘快ilines.length-3,你會最終

links[lines.length - 3] = lines[lines.length]; // Bang! 
0

的幾個問題:

1. 您可能希望這樣的:

for (int i = 0; i < lines.length; i++) { 
    links[i] = lines[j+3]; 

看起來像這樣:

for (int i = 0; i < links.length; i++) { 
    links[i] = lines[j * 3]; 

2. 嗯,是的。你走出界限。假設lines是12個元素。 links是相同的大小,所以你想從元素三十六分之十五(取決於我在#修正1)

的解決方案是讓links小閱讀:

String[] links = new String[(int)(lines.length/3)]; 

隨着校正在#1。

0

喬恩Skeet有正確的想法。有用的是學習如何自己調試這些東西。假設lines.length是5,也就是說links.length是5.如果跟蹤for循環的每一次迭代,會發生什麼?

i  |  j  |  j + 3  
----------------------------------------- 
0    0    3  
1    1    4 
2    2    5 

它會打破這個第三次迭代。你可以看到你並沒有訪問每三個元素,而是每個元素,並且你將它存儲在一個偏移位置,這會導致索引超出範圍異常。 Aiyiyi。