2016-10-07 17 views
-1

これは私がException in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1のJava印刷空の配列エラー

私の質問があり得るコードを実行すると、データが空の二重配列

private void findLast(){ 
    double empty[] = new double[0]; 
    if(data == empty){ 
     throw new ArrayIndexOutOfBoundsException(" Array is empty"); 
    }else{ 
     System.out.println(data[data.length-1]); 
    } 
} 

ていると私は非常に単純なコード、ある、必要がありません」スロー "と" if "は" else "の実行を停止しますか?そして、コードが正しく動作するように修正するにはどうしたらいいですか?

+1

「0-1 = -1」、-1インデックスなどはありません。 – Enzokie

+0

でも実行しないでください。 –

+0

申し訳ありませんが、「実行しないでください」とはどういう意味ですか? – Enzokie

答えて

3

==は、配列などの参照型の参照の等価性をテストします。

  • empty == emptytrue
  • empty == new double[0]falseです。

あなたは、配列が空の場合、検索する必要がある場合は、使用:Javaで

if (data.length == 0) { 
+0

私もそれを試みましたが、その後、 "スレッドの例外"メイン "java.lang.ArrayIndexOutOfBoundsException:配列が空です" –

+1

@ JohnKasich_2016それはあなたが望む出力ではありませんか?例外をスローしたくない場合は、スローしないでください。 – 4castle

+1

@ JohnKasich_2016 ofcsあなたの配列は空です。 – Enzokie

1

、==演算子をチェック2つの変数がないという二つのオブジェクト場合、同じオブジェクトを参照する場合変数参照は同等の値を持ちます。したがって、空とデータの両方がサイズ0の倍配列であっても、data == emptyは同じオブジェクトを参照しないため、決して真ではありません。

これは、サイズ0の配列に長さ1の要素が含まれていないという理由があるかどうかはわかりません。空の要素がゼロの場合は何ですか。それを作成するポイント?要素がゼロでなく、何も格納されていないかどうかを知りたければ、配列は初期化された後に常に何かが格納されていることを知っておくべきです。

1
if(data.length==empty.length) 
{ 
    throw new ArrayIndexOutOfBoundsException(" Array is empty"); 
}else{ 
    System.out.println(data[data.length-1]); 
}