2012-02-01 2 views
2

Мне нужно написать метод, используя ArrayList, но я не могу понять, как это сделать.Java Arraylist to Array

Я смог сделать это только с использованием массива, и мне было интересно, если бы был простой способ его изменить, чтобы он реализовал ArrayList.

Вот мой текущий код:

//public ArrayList<Integer> getPixelsInWindow(int wSize, int x, int y) { 
//ArrayList<Integer> values = new ArrayList<Integer>(); 

public int[] getPixelsInWindow(int wSize, int x, int y) { 

    int [] values; 

    int xMin = 0; 
    int xMax = 0; 
    int yMin = 0; 
    int yMax = 0; 

    xMin = x - (wSize/2); 
    if (xMin < 0) 
     xMin = 0; 
    yMin = y - (wSize/2); 
    if (yMin < 0) 
     yMin = 0; 
    xMax = x + (wSize/2); 
    if (xMax >= rowN) 
     xMax = rowN - 1; 
    yMax = y + (wSize/2); 
    if (yMax >= columnN) 
     yMax = columnN - 1; 
    int differenceX = xMax-xMin; 
    int differenceY = yMax-yMin; 

    values = new int[(differenceX + 1) * (differenceY + 1)]; 


    int j = 0; 
    for(int i = xMin;i < xMax + 1;i++){ 
     for(int k = yMin;k < yMax + 1;k++){ 

      values[j] = img[i][k]; 
      if(j == 0){ 

      } 
      j++; 
     } 
    } 

    return values; 
} 
+0

Почему вы должны использовать 'ArrayList'? – Bernard

+0

Где вы присваиваете значения * * вместо этого list.add (Integer) –

ответ

6

Это было сделано быстро и не тестируется ... но идея есть, я уверен:

... 
List<Integer> values = new ArrayList<Integer>(); 

int j = 0; 
for(int i = xMin;i < xMax + 1;i++){ 
    for(int k = yMin;k < yMax + 1;k++){ 

     values.add(new Integer(img[i][k])); 
     ... 
    } 
} 
+4

Вместо «нового целого» я ​​бы использовал Integer.valueOf (...), который является предпочтительным способом в соответствии с практикой SUN (лучше с точки зрения памяти управление), или пусть авто-бокс сделает это за вас. Кроме того, больше нет необходимости в переменной j. Но все же +1 – Guillaume

+0

О да ... конечно +1. Старые habbits ... :( –