[英]What is the difference between these two sections of code?
第一個例子
int windowStart = 0;
for (int i = 0; i + windowSize < fileArray.size(); i++) {
ArrayList <Character> window = new ArrayList <Character> ();
for (int s = windowStart; s <= windowStart + windowSize; s++) {
window.add(fileArray.get(s));
}
windowStart++;
}
VS.
第二個例子
int ind = 0;
for (int i = 0; i + windowSize < fileArray.size(); i++) {
for (int b = ind; b <= windowSize + ind; b++) {
window.add(fileArray.get(b));
}
ind++;
}
第一個拋出java.lang.IndexOutOfBoundsException
而第二個拋出沒有並且工作得很好。 fileArray
對於兩者都是相同的,但對於2. window
數組被定義為屬性,而對於第一個,“window”數組在方法內部定義(和for循環)。 這有什么區別嗎?
您無法獲得IndexOutOfBoundsException
以向列表添加值。 問題是s
的值等於或大於fileArray
數組或列表的實際大小。
並且因為兩個示例中的循環都是等效的,所以應該在您剛剛發布的代碼行之外找到問題。
嘗試調試(如果您使用的是IDE,則拋出IndexOutOfBoundsException
,否則添加一些簡單的System.out.println
語句以找出,為什么s
大於預期。
從第一個例子開始,從你告訴我的內容:
windowSize
= 30。 fileArray.size()
= 235。 然后,當i + windowSize > 235
時,你的第一個for循環將終止(這意味着i = 236 - 30 = 206`。
您將意識到windowStart
在第一個for-loop
內增加,因此最終, windowStart
將增加205
次(從0開始)。
此時,第二個for-loop
將計數( windowStart = 205
),你的條件s <= windowStart + windowSize
將是( s = 205 + 30
,等於235
),這滿足循環中的條件,你就是說fileArray.get(s)
,這意味着, fileArray.get(235)
,你得到一個IndexOutOfBoundsException
。
我假設windowSize
在第二個例子中不一樣,但在看到完整的源代碼之前我無法告訴你。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.