2017-05-06 5 views
0

내 클래스 Test2에는 영역을 반환하는 메서드가 있습니다. 그것은 인수 (Varargs)의 변수 번호를 받아 배열 lengthOfSidebreadthOfSidefor 루프를 사용하여 대체 Varargs를 추가하려고하지만 ArrayOutofBoundException이 발생합니다. 왜 내가이 문제를 어떻게 해결할 수 있습니까?Test2 배열 초기화 오류

class Test2 { 
    public double returnArea(double... corner){ 
     double[] lengthOfSide = {}; 
     double[] breadthOfSide = {}; 
     int i = 0; 

     for(double x : corner){ 
      lengthOfSide[i] = x; 
      breadthOfSide[i] = x; 

      System.out.println(lengthOfSide[i]); 
      System.out.println(breadthOfSide[i]); 
      i++; 
     } 
    } 
} 

public class Test1 { 
    public static void main(String args[]){ 
     Test2 total = new Test2(); 
     total.returnArea(34.2,22.3,332.2,223.3,22.4); 
    } 
} 

답변

4

Java 배열의 길이는 고정되어 있습니다. 현재 길이가 0 인 두 개의 배열을 작성합니다. 당신이 하나를 만들 때

double[] lengthOfSide = new double[corner.length]; 
double[] breadthOfSide = new double[corner.length]; 
+0

고마워요! 있어 그 – Novice

0

처럼 뭔가

double[] lengthOfSide = {}; 
double[] breadthOfSide = {}; 

변경 당신은 배열의 길이를 지정해야합니다. 그리고 나서 배열 길이를 변경할 수 없습니다. 귀하의 예제에서 길이가 0 인 배열이 2 개 있습니다. 자바

배열이 고정되어 당신은 기본적으로 허용되지 않는 기존 배열을 수정하려고

+0

도움을 주셔서 감사합니다 – Novice

1

은 ... 크기의 당신이 그들을 생성 한 후 수정할 수 없습니다. 기본적으로

,

double[] lengthOfSide = {}; 
double[] breadthOfSide = {}; 

이 라인은 당신을위한 배열 (빈 배열)을 만들었습니다. where in 루프는 존재하지 않는 배열의 인덱스에 값을 할당하려고합니다.

lengthOfSide[i] = x; 
breadthOfSide[i] = x; 

결과는 excetion입니다.

만약 당신이 내가 옳다는 것을 달성하기를 원한다면, 당신은 그것을 원하는 길이로 초기화해야합니다. 당신은 여전히 ​​목적을 위해 arraylist 사용을 고려하려고 같은 흐름과 함께 가고 싶은 경우

corner.length

는 그래서, 또한

double[] lengthOfSide = new double[corner.length]; 
double[] breadthOfSide = new double[corner.length]; 

해야한다.

+0

도움 주셔서 감사합니다 – Novice