Как обновить элемент в массиве, который находится в массиве в Java - PullRequest
0 голосов
/ 11 февраля 2012

Я создал ArrayList в Java и поместил в него несколько целых чисел и несколько двойников, затем я добавил массив целых чисел и массив двойников.Теперь я изменил значение одного из двойников в массиве и хочу его обновить.Однако у меня возникли проблемы с определением точного синтаксиса для него, так как это местоположение в массиве в ArrayList.

Если быть более точным, у меня есть

ArrayList<Patch> patches; 
patches = new ArrayList<Patch>();  //the ArrayList of patches

int[] VisPatch;  //the array of integers that keeps track of the patchID of the visible patches
double[] formFactor;  //the array of doubles that keeps track of the formFactor for the visible patches

//these are brought in from a file using a scanner
int patchID = fin.nextInt(); //the patch number for each patch in the file
double emissionPower = fin.nextDouble();  //the emission power of the individual patch
double reflectance = fin.nextDouble();  //the reflectance of the individual patch
int numVisPatch = fin.nextInt();  //the number of patches that are 'visible' to this particular patch

//initialize the arrays that hold the visible patch parameters
VisPatch = new int[numVisPatch];
formFactor = new double[numVisPatch];

for(int i=0; i<numVisPatch; i++){
    VisPatch[i] = fin.nextInt(); //brought in from file
    formFactor[i] = fin.nextDouble();
}//end for loop

//create a new patch object from the numbers read in
patches.add(new Patch(emissionPower, reflectance, numVisPatch, VisPatch, formFactor));

//get the first visible patch in the VisPatch array
int adjacentPatchID = patches.get(maxKeyIndex).VisPatch[k]; //maxKeyIndex has been declared, and yes, we're in a for loop that uses k

//do some math on the emissionPower
double increment = 2;
double newEmissionPower = patches.get(adjacentPatchID).emissionPower + increment;

//now update the emission power of the patch
ummm...

Я пробовал

patches.set(adjacentPatchID, newEmissionPower);

и

patches.set(get(adjacentPatchID).emissionPower, newEmissionPower);

и

patches.set(adjacentPatchID.emissionPower, newEmissionPower);

, но моя IDE (я использую Eclipse) просто положила кучу красных волнистыхлинии под всем и говорит, что я не знаю, о чем говорю (в основном потому, что я не знаю).

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Я предполагаю, что вы хотите обновить класс Patch, а не список исправлений.

Вы хотите получить патч по идентификатору (при условии, что вашим «id» в этом случае является его позиция в списке; если нет, вы можете вместо этого использовать Map<Integer, Patch>) и затем изменить его:

Patch patchToUpdate = patches.get(adjacentPatchId);
patchToUpdate.emissionPower = newEmissionPower;

//or if it has a proper mutator method:
patchToUpdate.setEmissionPower(newEmissionPower);
0 голосов
/ 11 февраля 2012

Вы создали ArrayList;Это List.Значение ... список вещей (В вашем случае, Patch объектов).Вам нужно либо получить к нему доступ через определенный индекс (функция ArrayList), либо пройти по нему, чтобы найти то, что вы ищете.

JavaDocs - ваш друг: http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

Как и в учебниках по Oracle: http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...