[英]How to handle List IndexOutOfBoundsException?
我正在嘗試為 LinkedList 編寫一個 get() 方法,其中私有方法由公共方法使用,但我不斷收到 IndexOutOfBoundsException 並且我不知道它來自哪里。
該異常似乎也只是不喜歡 integer 值、字符串、雙精度值和所有其他數據類型都可以。
該列表在 main 中沒有設置長度,所以現在我不知道為什么 java 抱怨。
public E get(int i)
{
if (i < 0 || i >= size())
{
throw new IndexOutOfBoundsException("" + i);
}
else if (i == 0 )
{
return head.value;
}
return get(i, head);
}
private E get(int i, Node node)
{
if (i == 0)
{
return (E) node.value;
}
return (E) get(i - 1, node.next);
}
您顯示的代碼是正確的(盡管它可能更簡單)。 我可以想到它拋出IndexOutOfBoundsException
的兩個可能原因:
get
的索引是錯誤的,size()
沒有返回正確的值。我認為這就是我們通過閱讀您的問題所能知道的一切。
if (i < 0 || i > size() - 1)
您不想檢查它何時相等,因為您需要size() - 1
索引的值。 另外我猜size()
返回鏈表的大小,所以你必須調整它:例如。 {1, 2, 3}
的大小為3
,但第三個數字在索引2
中。 所以,你會想要3 - 1
。
編輯:看起來是一樣的,但對我來說這種方式更清晰。
問題可能出在其他地方。 檢查size()
是否返回正確的值。 對照此方法檢查:
int size() {
Node temp = head;
int size = 0;
while (temp.next != null) {
size++;
temp = temp.next;
}
return ++size;
}
if (i < 0 || i >= size())
{
throw new IndexOutOfBoundsException("" + i);
}
我假設 size() 返回列表的大小。
錯誤是因為列表的長度從一開始。 列表本身沒有。 示例 - {a, b, c} 長度為 3 但是,a 為 0,b 為 1,c 為 2
因此需要減去 1。
我希望這會有所幫助,請隨時對疑慮和問題發表評論。 或批評。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.