如何将数组中的元素设置为方法参数?

时间:2018-10-13 05:07:58

标签: java arrays method-parameters

我有一个数组,其中包含许多对象(称为drops)和另一个单独的对象(称为greenDrop)。我想一次比较2个对象,一个来自数组,另一个则是单独的对象。要将数组和单独的对象设置为方法参数,代码如下:

   private static double GetRating()
        {
            int star5 = 12801;
            int star4 = 4982;
            int star3 = 1251;
            int star2 = 429;
            int star1 = 1265;

            double rating = (double)(5 * star5 + 4 * star4 + 3 * star3 + 2 * star2 + 1 * star1) / (star1 + star2 + star3 + star4 + star5);

            rating = Math.Round(rating, 1);

            return rating;
        }

        static void Main(string[] args)
        {
            double rating = GetRating();
            Console.WriteLine("Your product rating: " + rating);
            Console.ReadKey();
        }

我想知道是否可以在方法参数中设置数组的元素,而不是使用整个数组?这样一来,我就不必在我的方法中包括for循环。然后在main方法中调用该方法如下:

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;
}

2 个答案:

答案 0 :(得分:0)

该方法的第二个参数可以更改为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){
    ...
}

您可以传递零个,一个元素或多个(拖放)对象,例如

collision(greenDrop)

collision(greenDrop, drops[i])

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

我不知道从哪里获得numDrops。您可能需要将其更改为gd2.length

答案 1 :(得分:0)

您可以将方法添加到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
    }
}