Смотрите, если это не делать то, что вы хотите
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
имеет одну область. Я сохранил сортировку до конца цикла, так как это не делает вас хорошей сортировкой каждой итерации, если вы ничего не делаете с ней. Сортируйте его один раз перед его печатью.
Кстати, a1
и arr
- это ужасные имена. areas
и rectangles
было бы намного лучше.
UPDATE:
Одним из важнейших недостатков исходного кода была эта строка:
a1=new int[]{ current.area() };
Эта линия была в петлю получить новый current
каждый раз, получая область от него, и упаковывая его в массив из одного элемента. Но каждая ссылка на один элемент-массив была сохранена в том же месте, a1
. Чем каждый раз, когда петля снова обходила, старый наступил новый. Сортировка каждого массива из одного элемента не сделала ничего, чтобы исправить это.
'a1' существует только в области for-loop. – August
Где объявляется a1? –
@ Август, a1 инициализируется внутри цикла for. Но он может быть объявлен вне цикла for - по крайней мере, из этого кода кажется, что a1 инициализируется вне блока цикла for. – Razib