2016-10-07 4 views
-1

이 데이터가 비어있는 double 배열을 인으로, 내 매우 간단한 코드입니다자바 인쇄 빈 배열 오류

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]); 
    } 
} 

내가 코드를 실행하면 나는 "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

내 질문은 얻을해야하지 던져라 "와"만약에 "다른 사람이 달리기를 멈추는가? 그리고 코드가 제대로 실행되도록 수정하는 방법은 무엇입니까?

+1

'0-1 = -1'이며 -1 지수와 같은 것이 없습니다. – Enzokie

+0

하지만 실행하지 않아야합니까? –

+0

미안하지만, '도망해서는 안되니?'라는게 무슨 뜻이야? – Enzokie

답변

3

==은 배열과 같은 참조 유형에 대한 참조 평등에 대한 테스트입니다.

  • empty == emptytrue
  • empty == new double[0]false입니다.

는 어레이가 비어 사용 있는지 찾을 필요가 :

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

나는 그걸 시도해 보았지만 "스레드의 예외"메인 "java.lang.ArrayIndexOutOfBoundsException : 배열이 비어 있습니다." –

+1

@ JohnKasich_2016 원하는 출력이 아닙니까? 예외가 throw되지 않도록하려면 throw하지 마십시오. – 4castle

+1

@ JohnKasich_2016 ofcs 배열이 비어 있습니다. – Enzokie

1

자바에서 == 연산자 점검 두 변수가 동일한 객체를 참조하는 경우가 아닌 두 개체 경우 그 변수 참조는 동일한 값을가집니다. 따라서 empty와 data가 모두 크기가 0 인 double 배열 인 경우에도 data == empty는 같은 객체를 참조하지 않기 때문에 결코 참이되지 않습니다.

부수적으로,이 작업을 수행하는 데 필요한 충분한 이유가 있는지, 크기 0 배열에 길이가 1 인 요소가 없는지 잘 모르겠다. 빈 요소에 0 요소가 있다면, 무엇입니까? 그것을 창조의 요점은? 0 요소가없고 그 안에 아무것도 저장되어 있지 않다는 것을 알고 싶다면, 배열은 초기화 된 후에 항상 그 안에 뭔가가 저장되어 있다는 것을 알아야합니다.

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