簡體   English   中英

如何處理 List IndexOutOfBoundsException?

[英]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的兩個可能原因:

  1. 傳給get的索引是錯誤的,
  2. 方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM