为什么我不能访问此循环外的数组

时间:2015-04-04 14:06:00

标签: java arrays

当阵列打印在外面时,只有我的最后一个元素被打印出来。我一直在努力解决这个问题很长一段时间请帮助我,我在java中真的很弱

for (int i=0; i < arr.length; i++) {
    Rectangle current = arr[i];
    a1=new int[]{ current.area() };
    System.out.println("a1 area" + Arrays.toString(a1));
    System.out.println("------------------------------------");
    Arrays.sort(a1);
}
System.out.println("outside" + Arrays.toString(a1));

1 个答案:

答案 0 :(得分:1)

看看这不能做你想做的事情

int[] a1 = new int[arr.length]; //a1 is an array of areas

for (int i=0; i < arr.length; i++) {
     Rectangle current = arr[i];
     a1[i] = current.area();
     System.out.println("a1 area: " + a1[i]); //TODO remove debugging code
     System.out.println("------------------------------------"); 
}
Arrays.sort(a1);

System.out.println("outside" + Arrays.toString(a1));

a1的长度与arr相同,因为每个Rectangle都有一个区域。我将排序保存到循环之外,因为如果你不对它做任何事情,那么每次迭代都没有对你做任何好的排序。在打印之前将其排序一次。

顺便说一句,a1arr是可怕的名字。 areasrectangles会好得多。

更新:

原始代码的一个关键缺陷是这一行:

a1=new int[]{ current.area() };

该行每次循环获取一个新的current,从中获取该区域,并将其打包在一个元素数组中。但每个单元素阵列区域引用都存储在同一位置a1。每次循环再次出现时,旧的一个被新的踩到了。对每个单元素数组进行排序并没有做任何事情来解决这个问题。