2016-09-27 2 views
-6

이것은 Java의 첫 번째 큰 프로젝트입니다. 이렇게 많은 시간 동안이 오류로 붙어 있습니다. 나는 문자열 때문에 실수를하고 있다고 가정합니다. 내 코드가 말이되지 않으면 사과드립니다. 나는 내 실수를 배우려고 노력하고있어. 내 실수를 찾아 내도록 도와 주시겠습니까?스레드 "main"의 예외 java.lang.NegativeArraySizeException

InfoGain = new double[noOfAttributes]; 
    GainRatio = new double [noOfAttributes]; 
    findUnique(); 
+3

. 예외는 그 이름을 따서 명명됩니다. – Kayaman

답변

0

길이가 noOfAttributes - 1 인 두 개의 double 배열을 만듭니다. 그러나 사용자가 만든 순간에 noOfAttributes은 여전히 ​​0이므로 크기가 -1이되어 불법입니다.

보기에 조건식에 noOfAttributes을 설정합니다. if-statement을 입력하지 않으면 0이됩니다.

+0

당신은 그것을 정정하는 것처럼 친절합니까? – Raj

+0

나는 예외의 이유를 알려 줬다. 비즈니스 로직 문제로 인해 발생합니다. 너 혼자 고쳐야 해. – xenteros

0

크기 0의 배열

int []x=new int[0];  //this is possible. 
int []x=new int[-4]; // this is not possible 

너무 noofAttributes에게 값을 확인할 수있다, 그러나 네거티브 크기, 그것을 제외 될 수있다.

0

Java의 배열이 첫 번째 인덱스로 0으로 시작한다는 것을 먼저 이해해야합니다.

InfoGain = new double[noOfAttributes-1];

을 쓸 때 속성 없음은 처음에 0, 그래서 InfoGain 존재하고 따라서 그것은 당신에게이 예외를 제공하지 않습니다 배열에 인덱스 -1에 노력할 것입니다 수 없다.

두 배열에 대해 InfoGain = new double[noOfAttributes];을 사용해보십시오. 본질적으로 작동해야합니다.

0

당신은 다음과 같이 간단한 경우 - 다른 조건으로 위의 오류를 해결할 수 있습니다 : 당신은 부의 사이즈를 가진 배열을 만들려고

if(noOfAttributes > 0){ 
    InfoGain = new double[noOfAttributes]; 
    GainRatio = new double [noOfAttributes]; 
} 
else{ 
    InfoGain = new double[INITIAL_VALUE]; 
    GainRatio = new double [INITIAL_VALUE]; 
} 
findUnique();