簡體   English   中英

如果數組中不存在元素,如何引發數據異常?

[英]How to throw a data exception if an element does not exist in Array?

所以我有一個字符串數組列表,我目前正在使用一種方法,這樣用戶可以通過輸入索引號來訪問和返回數組列表中的某些元素。

如果他們嘗試訪問不在數組中的內容的索引號,我想拋出自己的數據異常。 在一分鍾,它拋出了索引超出范圍的異常。 目前,我正在使用下面的if語句,但是它不起作用! 我怎樣才能做到這一點?

if (set.get(index) == null) {
        throw new DataException("Record does not exists!");
    }

嘗試從ArrayList訪問越界索引將始終拋出IndexOutOfBounds異常。 要解決此問題,您有兩個選擇。 您可以在確定元素存在之前避免要求該元素,否則可以捕獲錯誤。

要捕獲該錯誤,您可以使用try-catch塊,如下所示:

try {
    someVariable = set.get(index);
} catch(Exception e) {
    throw new DataException(...);
}

為了避免首先觸發錯誤,您可以確保索引位於ArrayList的范圍內,如下所示:

if(index < 0 || index >= set.size()) {
    throw new DataException(...);
}

您只需要測試索引既不是負數也不是大於或等於列表大小:

if ( index < 0  || index >= list.size() ) {
    throw new DataException("Record does not exists!");
}

由於List.get(int index) javadoc保持不變:

拋出:

IndexOutOfBoundsException-如果索引超出范圍(索引<0 ||索引> = size())

現在,我不確定將IndexOutOfBoundsException包裝在DataException是個好主意。
訪問數組的邊界索引是編程錯誤。
IndexOutOfBoundsException很好地傳達了這個想法,而

throw new DataException("Record does not exists!"); 可以理解為客戶端錯誤。

將條件更改為:

if(index < 0 || index >= set.size()){
     ... 
}
if (index < 0 || index >= set.size() || set.get(index) == null) {
    throw new DataException("Record does not exists!");
}

在執行get()之前,請測試索引是否在ArrayList中,以避免IndexOutOfBoundsException。 如果前兩個條件中的任何一個為true,則不會達到get()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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