2017-05-06 78 views
0

我的课Test2有一个返回区域的方法。它接受可变数量的参数(Varargs),我试图使用for循环将替代可变参数添加到数组lengthOfSidebreadthOfSide中,但我得到的是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 = {}; 
double[] breadthOfSide = {}; 

喜欢的东西

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

谢谢!得到那 – Novice

0

当你创建一个你应该指定数组的长度。在此之后,您不能更改数组长度。在你的例子中有2个长度为0的数组。

+0

感谢您的帮助 – Novice

1

你基本上是试图修改现有的数组这是不允许的...

阵列在Java中是固定大小,你已经创建了他们之后,你无法修改它们。

基本上,

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

此线为您创建的阵列(空数组)。 其中在循环中,您试图将值分配给不存在的数组中的索引。

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

结果是EXCETION

如果你想达到我认为正确的你应该初始化它到你想要的长度即ie。 corner.length

所以它应该是,

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

此外,如果你还想去具有相同流动尝试使用arraylist为目的的考虑。

+0

感谢您的帮助 – Novice