0

我正在解決給定二維數組的問題。問題是,兩個數組中的一個數組可能不存在於給定的二維數組中。二維數組中缺少數組檢查 - Java

我想我可以做一個簡單的長度檢查或空檢查,但都沒有工作。無論哪種方式,我都會得到一個arrayIndexOutOfBounds異常。

String smartAssigning(String[][] information) { 
int[] employee1 = new int[3]; 
int[] employee2 = new int[3]; 
String name1 = ""; 
String name2 = ""; 

if(information[1].length <= 0 || information[1] == null) 
{ return information[0][0];} 

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 
at _runefvga.smartAssigning(file.java on line 7) 
... 6 more 

所述第一陣列位於索引0存在,但在索引1處的第二陣列不存在。是否有另一種方法來檢查這個?

+3

您應該創建一個Employee類。不要使用這麼多的並行數組/變量。 – 4castle

+1

你正在檢查'[1]'但是返回'[0]'? – brso05

+2

'(information [1] .length <= 0 || information [1] == null)'?所以它是:首先解引用可能的空指針,然後檢查,如果它是'null'? – fabian

回答

1

information.length將返回包含的數組的數量。 information[n].length將返回索引n處的數組長度。當您檢查if(information[1].length <= 0 ...時,您正在檢查是否有第二個數組以及該數組的長度是多少。如果沒有第二個數組,你會得到一個界限。

嘗試:

for(String[] array : information) { 
    //do something... 
} 
0

你需要採取在考慮此條件的檢查順序。

您寫道:

if(information[1].length <= 0 || information[1] == null) 

所以第一information[1].length <= 0被選中,只有當這是假的比information[1] == null檢查。

第二個條件是沒有意義的,如果information[1] == null比評估information[1].length時已經有一個Exception拋出。

所以,你需要的順序切換到:

if(information[1] == null || information[1].length <= 0) 

第二個數組不存在,所以information[1] == null是真的

+0

'information [1] == null'仍然可以拋出IndexOutOfBoundsException,您需要首先檢查數組'information!= null'和'information.length'。 –

0

Java中的2維數組實際上就是數組的數組。因此,您需要檢查「外部」數組(數組數組)的長度和「內部」數組(您的情況下的int數組)的長度。 不幸的是,從你的代碼中不清楚你想要做什麼,所以根據你的目標和你對呼叫者的瞭解(例如信息本身可能爲空),你可能需要檢查以下的一些或全部內容:

information!=null 
information.length 
information[x]!=null 
information[x].length 
+0

對象信息的類型是String [] []' –

+0

@SusannahPotts哦,是的,謝謝!我糾正了這一點。 –

+0

不客氣! –