2015-04-04 2 views
1

Когда массив печатается снаружи, мой последний элемент печатается. Я боролся с этим, так как долгое время, пожалуйста, помогите мне, я действительно слаб в 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)); 
+2

'a1' существует только в области for-loop. – August

+1

Где объявляется a1? –

+1

@ Август, a1 инициализируется внутри цикла for. Но он может быть объявлен вне цикла for - по крайней мере, из этого кода кажется, что a1 инициализируется вне блока цикла for. – Razib

ответ

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 имеет одну область. Я сохранил сортировку до конца цикла, так как это не делает вас хорошей сортировкой каждой итерации, если вы ничего не делаете с ней. Сортируйте его один раз перед его печатью.

Кстати, a1 и arr - это ужасные имена. areas и rectangles было бы намного лучше.

UPDATE:

Одним из важнейших недостатков исходного кода была эта строка:

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

Эта линия была в петлю получить новый current каждый раз, получая область от него, и упаковывая его в массив из одного элемента. Но каждая ссылка на один элемент-массив была сохранена в том же месте, a1. Чем каждый раз, когда петля снова обходила, старый наступил новый. Сортировка каждого массива из одного элемента не сделала ничего, чтобы исправить это.

+0

u правильное, это сработало, но почему это не помогло мне ... может у вас xplain – STRANGER

+0

@STRANGER, как это? – CandiedOrange

+0

@STRANGER это поможет вам понять, почему вы не смогли получить доступ к вашему массиву за пределами цикла: http://www.java-made-easy.com/variable-scope.html. В программировании очень важно понять, что такое «переменная область видимости». – Burkely91

Смежные вопросы