0

私は2D配列が与えられている問題を解決しています。問題は、2つの配列の1つが与えられた2D配列に存在しない可能性があるということです。2D配列の配列チェックがありません

私は単純な長さチェックやヌルチェックを行うことができますが、それらのどちらの作業もできないと考えました。いずれかの方法で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の2番目の配列は存在しません。これを確認する別の方法がありますか?

+3

'Employee'クラスを作成する必要があります。非常に多くの並列配列/変数を使用しないでください。 – 4castle

+1

あなたは '[1]'をチェックしていますが、 '[0]'は返っていますか? – brso05

+2

'(情報[1] .length <= 0 ||情報[1] == null)'?だから可能性のあるnullポインタを逆参照し、それが 'null'だったかどうかを確認するのですか? – fabian

答えて

1

information.lengthは、含まれる配列の数を返します。 information[n].lengthは、配列nの配列の長さを返します。 if(information[1].length <= 0 ...にチェックを入れると、2番目の配列があるかどうか、その配列の長さは何かを確認しています。 2番目の配列がない場合は、範囲外になります。

試してみてください。

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

あなたはアカウントにこの条件がチェックされる順序を取る必要があります。

あなたは書きました:information[1].length <= 0がチェックされ、これがinformation[1] == nullよりも偽である場合にのみチェックされ

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

だから、最初。

information[1] == nullの場合は、information[1].lengthを評価するときに既に例外がスローされているよりも、2番目の条件は意味をなさない。

だからあなたがするために切り替える必要があります:二番目の配列が存在しないので、information[1] == nullは、Javaでの2次元配列は、実際の配列の配列だけで真

+0

'information [1] == null'でも引き続きIndexOutOfBoundsExceptionをスローすることができます。配列' information!= null'と 'information.length'を最初にチェックする必要があります。 –

0

ある

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

を。したがって、 "外側"配列(配列の配列)と "内側"配列(あなたの場合はintの配列)の長さの両方をチェックする必要があります。 あなたのコードから残念なことに、あなたが何をしたいのかがはっきりしないので、あなたの目標やあなたの呼び出し元について知っていること(例えば、情報そのものがヌルかもしれません)によっては、以下のいくつかまたはすべてをチェックしたいかもしれません:

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

オブジェクト '情報'は 'String [] []'タイプです –

+0

@SusannahPottsああありがとう!私はそれを修正した。 –

+0

あなたは大歓迎です! –