Как установить элемент в массиве в качестве параметра метода? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть массив, который состоит из множества объектов (называемых каплями) и другого отдельного объекта (называемого greenDrop).Я хотел бы сравнить 2 объекта одновременно, один из массива, а другой будет отдельный объект.Чтобы установить массив и отдельный объект в качестве параметров метода, введите следующий код:

public boolean collision (GreenDrop gd1, Drop [] gd2){
    for(int i=0;i<numDrops;i++)
    {
        int xDistBetwnDrops=gd1.xpos-gd2[i].xpos;
        int yDistBetwnDrops=gd1.ypos-gd2[i].ypos;
        int totalLengthOfDrops=(gd1.xpos+gd1.size)+(gd2[i].xpos+gd2[i].size);
        if(xDistBetwnDrops<(totalLengthOfDrops/2)&&yDistBetwnDrops<(totalLengthOfDrops/2))
        {
            return true;
        }
    }
    return false;
}

Мне было интересно, можно ли установить элемент массива в параметре метода вместо использования всего массива?Это сделано для того, чтобы мне не пришлось включать цикл for в мой метод.Вызов метода в основном методе будет следующим:

if(collision(greenDrop, drops[i])==true)

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы можете добавить метод в свой класс GreenDrop, чтобы проверить, не сталкивается ли он с Drop.Или, если GreenDrop является производным от Drop, вы можете поместить метод в класс Drop.

class GreenDrop {
...
    public boolean collides(Drop drop) {
        int xDistBetwnDrops=this.xpos-drop.xpos;
        ...
    }
}

Затем вы можете выполнить итерацию массива капель следующим образом:

for(Drop drop : arrayOfDrops) {
    if (greenDrop.collides(drop)) {
        // collision detected
        // use break to exit for loop here if you want
    }
}
0 голосов
/ 13 октября 2018

Второй параметр метода можно изменить следующим образом: Drop

public boolean collision (GreenDrop gd1, Drop gd2){
    ...
    //The code has to be changed to not loop (Just compare two objects)
}

Но если вы все еще хотите использовать collision, передавая массив Drop (откуда-то еще), тогда выможно использовать varargs

public boolean collision (GreenDrop gd1, Drop... gd2){
    ...
}

Вы можете передать ноль, один элемент или несколько (Drop) объектов, таких как

collision(greenDrop)

collision(greenDrop, drops[i])

collision(greenDrop, drops[i], drops[j])

Я не знаю откудаnumDrops получается.Возможно, вам придется изменить это на gd2.length

...