2

我有一个带有构造函数的类车

public car (String name, int numberOfCars, int price) {}

然后,在我的主目录中,我将堆栈创建为:

Stack<car>carStack = new Stack<car>();
carStack.push("Honda", 200, 19000));
carStack.push("Toyota", 300, 18000));
carStack.push("BMW", 150, 40000));

我如何从这个堆栈中获得 500 辆汽车(150 辆宝马 + 300 辆丰田 + 50 辆本田)的价格?

4

4 回答 4

1

脚步:

  • 使用 for 循环遍历堆栈。Stack 实现了 Iterable 接口,因此 for-each 循环可能是最容易使用的:for (Car myCar: carStack) {...}
  • 对循环中的项目调用 getPrice()
  • 将此添加到循环之前已声明的 sum 变量
  • 量子点

顺便说一句,为了让您的代码符合 Java 命名标准,您的汽车类应该重命名为C ar。类和接口名称应以大写字母开头。

由于其他人正在炫耀代码,这是我的大喊代码片段:

double price = 0.0;
for (Car myCar: carStack) {
  price += myCar.getPrice();
}
于 2013-08-15T02:30:48.783 回答
1

您可以在foreach-loop中迭代您的堆栈:

double price = 0.0;

for(Car c : stack)
{
    price += c.getPrice();
}

或者您可以在while-loop中迭代您的堆栈:

Iterator<Car> iter = carStack.iterator();
double price = 0.0;

while (iter.hasNext()) {
    price += iter.next().getPrice();
}
于 2013-08-15T02:35:13.947 回答
1

如果您使用的是Eclipse Collections,则可以使用具有方法的MutableStacksumOfInt()

Car honda = new Car("Honda", 19000);
Car toyota = new Car("Toyota", 18000);
Car bmw = new Car("BMW", 40000);

MutableStack<Car> carStack =
        ArrayStack.newStackFromTopToBottom(honda, toyota, bmw);

long price = carStack.sumOfInt(new IntFunction<Car>()
{
    @Override
    public int intValueOf(Car eachCar)
    {
        return eachCar.getPrice();
    }
});
Assert.assertEquals(77000, price);

问题提到每辆车都有很多次出现。也许BagStackIterable. ABag跟踪项目以及该项目在Bag. 这意味着numberOfCarsCar.

MutableBag<Car> carBag = HashBag.newBag();
carBag.addOccurrences(honda, 200);
carBag.addOccurrences(toyota, 300);
carBag.addOccurrences(bmw, 150);

long price = carBag.sumOfInt(new IntFunction<Car>()
{
    @Override
    public int intValueOf(Car eachCar)
    {
        return eachCar.getPrice();
    }
});
Assert.assertEquals(15200000, price);

当 Java 8 发布时,我们可以将匿名内部类替换为 lambda 或方法引用。这是带有方法引用的代码的样子。

long price = carBag.sumOfInt(Car::getPrice);

如果 price 是 double 而不是 int,我们只需要替换sumOfInt()sumOfDouble().

long price = carBag.sumOfDouble(Car::getPrice);

注意:我是 Eclipse 集合的提交者。

于 2013-08-27T16:33:14.863 回答
0
int total = 0;
while(!cars.isEmpty()) {
    total += cars.pop().getTotal();
}

然后 Car 的 getTotal:

public double getTotal() {
    return price * quantity;
}

或者,如果您想保留堆栈,请执行其他人提到的 foreach 。

于 2013-08-15T03:18:56.960 回答